AWS Lambda 和 Redis 客户端。为什么我不能调用回调?

AWS Lambda and Redis client. Why can't I call callback?

我正在尝试编写一个使用 Redis 的 AWS Lambda 函数。当我 运行 下面的代码时:

'use strict'

function handler (data, context, callback) {
  const redis = require("redis")
  const _ = require("lodash")
  console.log('before client')
  const client = redis.createClient({
    url: 'redis://cache-url.euw1.cache.amazonaws.com:6379',
  })
  console.log('after client')
  callback(null, {status: 'result'})
  console.log('after callback')
}

exports.handler = handler

我有这样的答案:

{
  "errorMessage": "2016-09-20T15:22:27.301Z 07d24e0b-7f46-11e6-85e9-e5f48906c0da Task timed out after 3.00 seconds"
}

日志看起来像:


17:22:24
START RequestId: 07d24e0b-7f46-11e6-85e9-e5f48906c0da Version: $LATEST

17:22:26
2016-09-20T15:22:26.014Z    07d24e0b-7f46-11e6-85e9-e5f48906c0da    before client

17:22:26
2016-09-20T15:22:26.134Z    07d24e0b-7f46-11e6-85e9-e5f48906c0da    after client

17:22:26
2016-09-20T15:22:26.135Z    07d24e0b-7f46-11e6-85e9-e5f48906c0da    after callback

17:22:27
END RequestId: 07d24e0b-7f46-11e6-85e9-e5f48906c0da

17:22:27
REPORT RequestId: 07d24e0b-7f46-11e6-85e9-e5f48906c0da  Duration: 3001.81 ms    Billed Duration: 3000 ms Memory Size: 128 MB    Max Memory Used: 24 MB

17:22:27
2016-09-20T15:22:27.301Z 07d24e0b-7f46-11e6-85e9-e5f48906c0da Task timed out after 3.00 seconds

恕我直言,这意味着调用了回调但什么也没发生。

当我删除客户端的初始化时,我看到了正确的响应。

有什么想法吗?

来自the official documentation

When the callback is called, the Lambda function exits only after the Node.js event loop is empty.

由于您正在调用回调,但您的 Lambda 函数调用并未结束,看来事件循环中仍有一些内容。除了创建 Redis 连接之外,您的函数实际上并没有做任何事情。我猜您需要在完成 Redis 连接后关闭它,以便清除事件循环并允许 Lambda 调用完成。