AWS lamda在回调命中之前退出

时间:2018-06-20 11:03:11

标签: node.js aws-lambda

我遇到了AWS Lamda的问题,该节点早期存在Node 8.10,并返回了隐式null的回调:

const request = require('request');

exports.handler = async (event, ctx, callback) => {
    console.log(`Fetching '${event.url}'...`);
    request(event.url, (err, body) => {
        if (err) return callback(err);
        return callback(null, body);
    });
}

这是我自己的更大的lambda函数遇到的问题的基本示例。本质上,当我调用第三方资源时,Lambda在到达回调之前完成。

我已经阅读了一些文档页面和SO帖子,它们涉及: callbackWaitsForEmptyEventLoop,但将其设置为false不会改变行为。

我设法通过将代码包装在Promise中然后在调用await之前使用callback来迫使它等待响应,但这真的有必要吗?

exports.handler = async (event, ctx, callback) => {

    const executeLambda = new Promise((resolve, reject) => {
        console.log(`Fetching '${event.url}'...`);
        request(event.url, (err, body) => {
            if (err) return reject(err);
            return resolve(body);
        });
    });

    await executeLambda
        .then((res) => callback(null, res))
        .catch(callback);
}

注意:我正在docker run --rm -v "$PWD":/var/task lambci/lambda:nodejs8.10 index.handler '{"url": "https://www.google.com"}'

上本地模拟

1 个答案:

答案 0 :(得分:1)

问题是我用async声明了处理程序。以下作品:

const request = require('request');

exports.handler = (event, ctx, callback) => {
    console.log(`Fetching '${event.url}'...`);
    request(event.url, (err, body) => {
        if (err) return callback(err);
        return callback(null, body);
    });
}