AWS Lambda NodeJs не может ответить - PullRequest
2 голосов
/ 21 марта 2019

Я пытаюсь реализовать простой пример Node Js на AWS Lambda,
В коде есть пример примера библиотеки Async.
Код работает нормально, но по какой-то причине функция Lambda возвращает нулевой ответ.
Я также новичок в Node, пожалуйста, помогите.

Ниже приведен код -

var async = require('async');

exports.handler = async (event, context, callback) => {
    async.waterfall([
        function(callback) {
            console.log("ONE");
            callback(null, 1);
        },
        function(resp, callback) {
            console.log("TWO : ", resp);
            callback(null, 2);
        },
        function(resp, callback){
            console.log("THREE : ", resp);
            callback(null, "Done");
        }
    ],
    function(err, resp) {
        let response = {};
        if (err) {
            console.log("Error",err);
            response = {
                statusCode: 500,
                body: JSON.stringify('Error!'),
            };
            return response;
        } else {
            console.log("Success",resp);
            response = {
                statusCode: 200,
                body: JSON.stringify('Ok!'),
            };
            return response;
        }
    });
};

Ниже приведены журналы CloudWatch -

START RequestId: ab9aa426-dfc9-44ac-8d96-a4f102e30861 Version: $LATEST
2019-03-21T15:15:26.597Z    ab9aa426-dfc9-44ac-8d96-a4f102e30861    ONE
2019-03-21T15:15:26.597Z    ab9aa426-dfc9-44ac-8d96-a4f102e30861    TWO :  1
2019-03-21T15:15:26.597Z    ab9aa426-dfc9-44ac-8d96-a4f102e30861    THREE :  2
2019-03-21T15:15:26.597Z    ab9aa426-dfc9-44ac-8d96-a4f102e30861    Success Done
END RequestId: ab9aa426-dfc9-44ac-8d96-a4f102e30861
REPORT RequestId: ab9aa426-dfc9-44ac-8d96-a4f102e30861  Duration: 37.28 ms  Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 67 MB  

Я использовал образец схемы узла, который отлично работает -

exports.handler = async (event) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

Ответы [ 2 ]

4 голосов
/ 21 марта 2019

Поскольку вы уже используете Node 8, вам больше не нужно использовать устаревший, запутанный подход callback.Используйте await вместо

exports.handler = async (event) => {
    try {
        await somePromise1 
        await somePromise2
        await somePromise3 
        console.log("Success", resp);
        response = {
            statusCode: 200,
            body: JSON.stringify('Ok!'),
        };
        return response;
    } catch (e) {
        console.log("Error", err);
        response = {
            statusCode: 500,
            body: JSON.stringify('Error!'),
        };
        return response;
    }
};

, где somePromise1, somePromise2 и somePromise3 - ваши обещанные обратные вызовы.

Подробнее об асинхронности / ожидании здесь .

2 голосов
/ 21 марта 2019

Попробуйте удалить async из обработчика и используйте callback вместо return:

var async = require('async');

exports.handler = (event, context, callback) => {
    async.waterfall([
        function(callback) {
            console.log("ONE");
            callback(null, 1);
        },
        function(resp, callback) {
            console.log("TWO : ", resp);
            callback(null, 2);
        },
        function(resp, callback){
            console.log("THREE : ", resp);
            callback(null, "Done");
        }
    ],
    function(err, resp) {
        let response = {};
        if (err) {
            console.log("Error",err);
            callback(null, {
                statusCode: 500,
                body: 'Error!',
            });
        } else {
            console.log("Success",resp);
            callback(null, {
                statusCode: 200,
                body: 'Ok!',
            });
        }
    });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...