2016-06-11 4 views
0

У меня есть лямбда-функция nodejs, которая по существу запускает набор тестов в newman (JS-библиотека Postman). Тесты выполняются успешно, но когда лямбда пытается отправить сообщение в Codepipeline с помощью codepipeline.putJobSuccessResult, он продолжает бросать максимальный стек вызовов превышен. Печатный стек ошибок не кажется очень длинным (я могу просто увидеть 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

Смежные вопросы