AWS Lambda中的上下文与回调

Nav*_*ati 9 javascript amazon-web-services node.js aws-lambda

我喜欢在AWS中使用lambda函数.它理想地减少了维护服务器的时间.我的问题是当使用lambda时,有上下文对象和回调函数来终止函数.是否有任何使用回调超过上下文的用例.

谁能告诉我context.succeed()的回调行为(错误,消息)

var startedAt = new Date();

var interval = setInterval(function () {
    console.log(startedAt, new Date());
}, 1000);

exports.handler = function (event, context, callback) {
    setTimeout(function () {
        console.log('returning');
        // v1:
        return callback(null);
        // v2:
        // return context.succeed();
    }, 5000);
};
Run Code Online (Sandbox Code Playgroud)

Jam*_*rpe 12

context.succeed是较旧的做事方式,并且在0.10.42运行时(callback特别是参数没有)的情况下受支持.如果你在较新的运行时(4.3和6.10)上运行,它是为了向后兼容而包含的,但现在"正确"的方式是使用该callback功能.

  • 您能否澄清一下“return”在这一切中的作用是什么?它是像“context”一样立即结束事件循环,还是以其他方式表现? (2认同)

Ker*_*ode 7

这里 callback表示为 的改进context.succeed

此外,事件循环允许 Node.js 执行非阻塞 I/O 操作。如果callback等待的时间比您预期的要长,这意味着您不知道事件循环中还有其他未完成的任务,这是一个问题 - 您应该知道队列中正在等待哪些任务。您可以使用以下函数来了解callback等待的原因:

process._getActiveHandles() //gets you handles that are still alive
process._getActiveRequests() //gets you info about active libuv requests.
Run Code Online (Sandbox Code Playgroud)

在完成这些任务之前冻结 lambda 可能会导致意外行为。下一个 lambda 执行可以在同一个容器上完成。这意味着前一次 lambda 执行的事件循环任务在当前 lambda 执行中完成。

此外,假设您对 进行了多个测试exports.handlercallback每个测试都是独立的。使用context.succeed,由于第一个测试,您的第二个测试可以通过(而不是失败),从而将任务留在事件循环中。