我喜欢在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);
};
答案 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
,由于第一次测试,第二次测试可以通过(而不是失败),从而使任务处于事件循环中。