无法让AWS lambda等到异步请求调用完成

时间:2018-06-04 05:11:57

标签: node.js amazon-web-services async-await aws-lambda

我在理解AWS Lambda Node 8.10中的异步调用时遇到了相同/类似的问题。以下是我的代码。它运行,但不是我想要的。我试图获取HTTPS标头和相关的SSL证书。如果我运行lambda一次,它会成功运行,但没有数据。如果我一遍又一遍地测试它,其中一个返回并返回getPeerCertificate输出到日志。

这是我的头脑......我们定义了一个回调函数res。我相信正在发生的事情是在从request调用回调之前lambda消失了。我正在努力使lambda保持活着以等待请求的返回。我试图尽可能减少这个(没有额外的模块)。那些可以提供帮助的任何异步者?

exports.handler = async (event) => {
    console.log(event);
    var https = require('https');

    var options = {
        method: 'HEAD',
        hostname: 'google.com',
        port: 443,
        path: '/'
    };

    try {
        var req = https.request(options, (res) => {
            console.log(res.connection.getPeerCertificate());
        });

        req.end();

    } catch (err) {
        console.error(err);
    }
};

1 个答案:

答案 0 :(得分:2)

您应该使用lambda的回调函数:

const https = require('https');

exports.handler = (event, context, callback) => {
    console.log(event);

    const options = {
        method: 'HEAD',
        hostname: 'google.com',
        port: 443,
        path: '/'
    };

    const req = https.request(options, (res) => {
        res.on('data', (d) => {
            callback(null, d);
        });
    });

    req.on('error', (e) => {
        callback(e);
    });

    req.end();
}

另一个解决方案应该是明确声明一个承诺。