2016-06-11 2 views
0

나는 기본적으로 newman (우체국의 JS 라이브러리)에서 일련의 테스트를 실행하는 nodejs 람다 함수를 가지고 있습니다. 테스트는 성공적으로 실행되지만 람다가 codepipeline.putJobSuccessResult를 사용하여 Codepipeline에 메시지를 보내려고하면 최대 호출 스택 초과 오류가 계속 발생합니다. 인쇄 된 오류 스택은 그리 길지 않습니다 (단지 6 행만 인쇄 할 수 있음).타격 람다 함수에서 초과 된 최대 호출 스택

스택 추적이 초과하는 이유와 디버깅 방법을 쉽게 이해할 수 있습니다.

관련 exports.handler

exports.handler = function(event, context) { 
    var jobId = event["CodePipeline.job"].id; 
    console.log("Triggering tests for job "+ jobId); 


    var putJobSuccess = function(message) { 
     codepipeline.putJobSuccessResult({jobId: jobId}, (err, data) => { 
      if (err) { 
       context.fail(err); 
      } else { 
       context.succeed(message) 
      } 
     }); 
    } 

    var putJobFailure = function(message) { 
     console.log("Tests failed for job: " + jobId); 
     var params = { 
      jobId: jobId, 
      failureDetails: { 
       message: JSON.stringify(message), 
       type: 'JobFailed', 
       externalExecutionId: "" 
      } 
     } 
    } 

    var testRunnerCallback = function(response) { 
     if (response === 1) { 
      putJobFailure("Tests failed. View logs for details"); 
     } else { 
      putJobSuccess("All Tests passed"); 
     } 
    } 

    Newman.execute(collections, newmanOptions, testRunnerCallback); 
} 

감사

+0

http://stackoverflow.com/questions/20936486/node-js-maximum-call-stack-size-exceeded – eenagy

+0

는 이러한 접근 방식을 시도했다. 그러나 불행히도 소용이 없습니다. – bythe4mile

+0

여기에 코드를 붙여주십시오. 우리가 도울 수 있도록 – eenagy

답변

-1

context는 더 success 또는 fail 방법이 없습니다. callback 매개 변수를 사용하십시오.

이 시도 :

exports.handler = function(event, context, callback) { 
    var jobId = event["CodePipeline.job"].id; 
    console.log("Triggering tests for job "+ jobId); 


    var putJobSuccess = function(message) { 
     codepipeline.putJobSuccessResult({jobId: jobId}, callback); 
    } 

    var putJobFailure = function(message) { 
     console.log("Tests failed for job: " + jobId); 
     var params = { 
      jobId: jobId, 
      failureDetails: { 
       message: JSON.stringify(message), 
       type: 'JobFailed', 
       externalExecutionId: "" 
      } 
     } 
     callback(params); 
    } 

    var testRunnerCallback = function(response) { 
     if (response === 1) { 
      putJobFailure("Tests failed. View logs for details"); 
     } else { 
      putJobSuccess("All Tests passed"); 
     } 
    } 

    Newman.execute(collections, newmanOptions, testRunnerCallback); 
} 
+0

컨텍스트 개체 *에는 * 성공 및 실패 메서드가 있습니다. 정보를 어디에서 얻고 있는지 확실하지 않습니다. – idbehold

+0

그래도 성공과 실패 방법이 있습니다. 어떤 경우 든 codepipeline.putJobSuccessResult가 스택 크기를 초과하여 계속 유지합니다 – bythe4mile

+0

@idbehold [docs] (http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html)를 확인했습니다.), 그리고 람다를 실행하여 컨텍스트 객체를 로그 아웃했는데 무엇을 놓쳤는가 ?? – eenagy

관련 문제