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
恕我直言,这意味着调用了回调但什么也没发生。
当我删除客户端的初始化时,我看到了正确的响应。
有什么想法吗?
When the callback is called, the Lambda function exits only after the
Node.js event loop is empty.
由于您正在调用回调,但您的 Lambda 函数调用并未结束,看来事件循环中仍有一些内容。除了创建 Redis 连接之外,您的函数实际上并没有做任何事情。我猜您需要在完成 Redis 连接后关闭它,以便清除事件循环并允许 Lambda 调用完成。
我正在尝试编写一个使用 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
恕我直言,这意味着调用了回调但什么也没发生。
当我删除客户端的初始化时,我看到了正确的响应。
有什么想法吗?
When the callback is called, the Lambda function exits only after the Node.js event loop is empty.
由于您正在调用回调,但您的 Lambda 函数调用并未结束,看来事件循环中仍有一些内容。除了创建 Redis 连接之外,您的函数实际上并没有做任何事情。我猜您需要在完成 Redis 连接后关闭它,以便清除事件循环并允许 Lambda 调用完成。