AWS Lambda中的上下文与回调

时间:2017-12-20 12:29:55

标签: javascript node.js amazon-web-services 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);
};

2 个答案:

答案 0 :(得分:12)

context.succeed是较旧的处理方式,在0.10.42运行时(callback参数具体不支持)下受支持。如果你在较新的运行时(4.3和6.10)上运行,它是为了向后兼容而包含的,但现在“正确”的方式是使用callback功能。

答案 1 :(得分:3)

Here callback表示对context.succeed的改进。

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

process._getActiveHandles() //gets you handles that are still alive
process._getActiveRequests() //gets you info about active libuv requests.

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

此外,假设您对exports.handler有多个测试,而对于callback,每个测试都是独立的。使用context.succeed,由于第一次测试,第二次测试可以通过(而不是失败),从而使任务处于事件循环中。