AWS Lambda功能超时

ken*_*ken 3 amazon-web-services aws-lambda

在我的本地mocha测试中,以下处理函数工作正常.但是,当我上传到AWS(使用无服务器框架)时,它会超时(除非您没有提供uid参数,然后它会立即正确响应).

特别奇怪的是,在不到3秒(超时设置为5秒)的情况下,作业完成,甚至输出"事后"日志消息,但它以某种方式调用回调并且没有完成Lambda函数

这是cloudwatch日志:

![在此处输入图像说明] 1

这是处理函数:

export const handler = (event: IRequestInput, context: IContext, cb: IGatewayCallback) => {
  console.log('EVENT:\n', JSON.stringify(event, null, 2));
  const uid = _.get(event, 'queryStringParameters.uid', undefined);
  if(!uid) {
    cb(null, {
      statusCode: 412,
      body: 'no User ID was provided by frontend'
    });
    return;
  }

  oauth.getRequestToken()
    .then(token => {
      console.log('Token is:\n', JSON.stringify(token, null, 2));
      console.log('User ID: ', uid);
      token.uid = uid;
      return Promise.resolve(token);
    })
    .then((token) => {
      console.log('URL: ', token.url);
      cb(null, {
        statusCode: 200,
        body: token.url
      });
      console.log('post-facto');
    })
    .catch((err: PromiseError) => {
      console.log('Problem in getting promise token: ', err);
      cb(err.message);
    });

};
Run Code Online (Sandbox Code Playgroud)

idb*_*old 8

添加以下内容作为处理函数的第一行:

context.callbackWaitsForEmptyEventLoop = false
Run Code Online (Sandbox Code Playgroud)

  • @ken它也意味着你的代码中的某些东西导致事件循环永不消耗.数据库连接是这种情况的典型原因,因为它们将打开一个套接字,并且当套接字仍处于打开状态时,节点不会将事件循环视为空. (3认同)