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
功能.
这里 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.handler
,callback
每个测试都是独立的。使用context.succeed
,由于第一个测试,您的第二个测试可以通过(而不是失败),从而将任务留在事件循环中。
归档时间: |
|
查看次数: |
8563 次 |
最近记录: |