当前位置: 首页 > 面试题库 >

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

齐高阳
2023-03-14
问题内容

我正在尝试编写一个使用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

恕我直言,这意味着调用了回调,但没有任何反应。

删除客户端的初始化后,我会看到正确的响应。

有任何想法吗?


问题答案:

从官方文档中:

调用回调时,Lambda函数仅在Node.js事件循环为空之后退出。

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



 类似资料:
  • [粤语][1] [1]:https://i.stack.imgur.com/c7n8R.png'C:\用户\busra\下载 C:\用户\busra\下载 C:\用户\busra\下载 C:\用户\busra\下载

  • 我的老师给了我这个 在一个n边正多边形中,所有边都有相同的长度,所有角都有相同的度数。设计一个名为正多边形的类,它包含:一个名为n的私有int数据栏,它定义了多边形中默认值为3的边的数量。一个名为side的私有双数据栏,它存储了默认值为1的边的长度。一个名为X的私有双数据栏,它定义了默认值为0的多边形中心的x坐标。一个名为Y的私有双数据栏,它定义了默认值为0的多边形中心的y坐标。创建具有指定边数、

  • 我尝试连接angular前端和springboot后端... 所以任何人都可以告诉我这里的错误在哪里....?

  • 我制作了一个FTP客户端(被动),它无法连接到服务器。我使用的FTP服务器是Filezilla;我只是用它来测试。每次我运行java程序(FTP客户端)时,Filezilla都会断开连接,并在Eclipse中出现以下错误: 这是FTP客户端: 这是我连接的程序: 还尝试编写我的lan ip而不是

  • 问题内容: 我的思维模型是“聊天”的模型,我订阅了某个频道,然后可以向该频道发布消息。 问题答案: 由于pub / sub是异步的,因此已发布的消息可能会在任何时间出现,包括您期望命令响应的时间。 尽管redis是单线程的,通常可以防止这种情况,但是网络延迟可能会引起一些有趣的效果-根据消息的内容,您可以在服务器实际收到命令之前收到对命令的有效响应。 就是说,如果您确实想使用- 可能应该使用单个连

  • 问题内容: While 是一个空字符串,is 和is是。为什么是NaN? 我的问题是,为什么不为而为。 我的问题是为什么仅在客户端发生这种情况?在服务器端(Node.js)是。 总结 : 在客户端: 在Node.js中: 问题答案: 更新的注释:此问题已在Chrome 49中修复 。 非常有趣的问题!让我们深入。 根本原因 差异的根源在于Node.js如何评估这些语句与Chrome开发工具如何进行