node.js – AWS lambda函数在超时错误后停止工作 - 代码日志

node.js – AWS lambda函数在超时错误后停止工作

我有一个简单的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);
}

当我打电话给现在的功能没有问题。当我调用wait函数时,我得到超时错误,然后任何后续调用现在给我同样的错误。

这是预期的行为吗?我会认为对lambda函数的任何后续调用都应该工作。我知道我可以随时增加配置超时,但宁愿不会。

你应该寻找你的功能句柄如何与特定的
 context.callbackWaitsForEmptyEventLoop

如果布尔类型为false,那么setTimeout将不会被触发,因为您可能早些回答/处理了lambda调用。
但是如果callbackWaitsForEmptyEventLoop的值为true,那么您的代码将会执行您要查找的内容。

此外,它可能更容易通过回调直接处理一切,而不需要“手写”超时,更改配置超时等…

例如。

function doneFactory(cb) { // closure factory returning a callback function which knows about res (response)
  return function(err, res) {
    if (err) {
      return cb(JSON.stringify(err));
    }
    return cb(null, res);
  };
}

// you're going to call this Lambda function from your code
exports.handle = function(event, context, handleCallback) {

  // allows for using callbacks as finish/error-handlers
  context.callbackWaitsForEmptyEventLoop = false;

  doSomeAsyncWork(event, context, doneFactory(handleCallback));
};
http://stackoverflow.com/questions/37232827/aws-lambda-function-stops-working-after-timed-out-error

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:node.js – AWS lambda函数在超时错误后停止工作