node.js - 无法让 AWS lambda 等待异步请求调用完成

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

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

这是我摸不着头脑的地方...定义了一个回调函数res。我相信正在发生的事情是 lambda 在从 request 调用回调之前消失。我正在努力解决如何使 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);
    }
};

最佳答案

您应该使用 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();
}

另一种解决方案应该是显式声明 promise 。

关于node.js - 无法让 AWS lambda 等待异步请求调用完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50673737/

相关文章:

node.js - API触发消息的头像如何设置?

javascript - 如何使用 Nodejs 对远程 Mongodb 进行 CRUD 操作

javascript - imagemin 错误 [TypeError : (input, 输出,选择)=> {

amazon-web-services - AWS STS AssumeRole : Are IAM user credentials needed, 与否?

node.js - 将消息从 AWS Lambda 发布到 AWS IoT

javascript - 单元测试 Mongoose 方法

amazon-web-services - 使用 SAM 模板创建 DynamoDB 表时出现错误

javascript - 如何停止点击事件 javascript 上的异步函数?

node.js - 使用异步请求

javascript - arguments.callee 异步时不返回可调用函数