我有一个简单的 lambda 函数,它异步进行 API 调用,然后返回数据。 99% 的时间这都很好。当 API 花费的时间超过 lambda 配置的超时时间时,它会按预期给出错误。现在的问题是,当我对 lambda 函数进行任何后续调用时,它会永久地给我超时错误。
"errorMessage": "2016-05-14T22:52:07.247Z {session} Task timed out after 3.00 seconds"
为了测试是否是这种情况,我将 lambda 超时设置为 3 秒,并有办法在 lambda 中触发这两个函数。
Javascript
function now() {
return response.tell('success');
}
function wait() {
setTimeout(function() { return response.tell('success'); }, 4000);
}
当我调用 now
函数时没有问题。当我调用 wait
函数时,我收到超时错误,然后对 now
的任何后续调用都会给我同样的错误。
这是预期的行为吗?我认为对 lambda 函数的任何后续调用都应该有效。我知道我总是可以增加配置超时,但宁愿不要。
原文由 jjbskir 发布,翻译遵循 CC BY-SA 4.0 许可协议
您应该寻找您的 函数句柄 如何与特定的
context.callbackWaitsForEmptyEventLoop
如果该布尔类型为
false
,则永远不会触发 setTimeout,因为您可能已经回答/处理了之前的 lambda 调用。但是,如果callbackWaitsForEmptyEventLoop
的值是true
- 那么您的代码将满足您的需求。此外 - 直接通过回调处理所有事情可能更容易,不需要“手写”超时,更改配置超时等等……
例如