2016-02-20 2 views
2

Использование сценария ванильного узел как следующий асинхронном узел работает просто отлично:узел асинхронной вызывает только первую функцию, когда внутри узла-лямбда

async = require('async'); 

async.waterfall([ 
    function (c) { 
     console.log(1); 
     c(null); 
    },   
    function (c) { 
     console.log(2); 
     c(null); 
    }  
    ]); 

выше при запуске через node test.js распечатывает:

1 
2 

... как и ожидалось.

Однако если поместить код внутри обработчика узлов лямбда:

var async = require('async'); 

exports.handler = function(event, context) { 
    console.log("=================================="); 

    async.waterfall([ 
    function (c) { 
     console.log(1); 
     c(null); 
    },   
    function (c) { 
     console.log(2); 
     c(null); 
    }   
    ]); 

    console.log("=================================="); 
    context.done(); 
} 

Только первый метод вызывается, когда я бегу ./node_modules/.bin/node-lambda run

================================== 
1 
================================== 

Я использую:

  • async 1.5.2,
  • узел 5.5.0
  • узел лямбда 0.1.5

ответ

0

Вы используете асинхронный код. Очевидно, что код context.done(); для завершения выполнения основной функции handler и другого асинхронного кода (вторая функция в водопаде) не могут быть выполнены, у него не было достаточно времени, потому что основная функция была завершена.

+0

@keithgould Я обновил ответ. Попробуйте удалить 'context.done();' для проверки – isvforall

+0

Boom! Это было @isvforall. Спасибо. –

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