gpt4 book ai didi

javascript - 进程超时 |亚马逊 Lambda 到 Firebase

转载 作者:搜寻专家 更新时间:2023-10-31 22:56:19 25 4
gpt4 key购买 nike

我在 node.js 中编写了代码,我的数据在 Firebase 上。我面临的问题是我的代码永远不会退出。我已经这样做了Link

问题是 firebase 引用/监听器永远不会变为 null,因此我的函数永远不会退出。我尝试使用 firebase.database().goOffline() 但它没有用。

在我的本地机器上,我使用 process.exit(0) 强行停止了进程,但是当我在 AWS lambda 上部署我的代码时,它没有返回任何响应/回调并退出(给出错误消息“进程在完成请求前退出”)

我还在 lambda 中调用回调后添加了 5-10 秒的等待,然后强行退出该进程,但这也没有帮助。

如何解决这个问题?请帮忙。

最佳答案

您正在经历任何新 lambda 用户都离开的危机。

按照建议,您可以使用 context.done 停止。但是,不推荐这样做,因为只有在 nodejs 的历史运行时版本才可能这样做。


为什么会超时?

您的 lambda 可能会到达代码的最后一行并继续运行。好吧,它实际上是在等待一些东西——等待事件循环为空。

这是什么意思?

在 nodejs 中,当您进行异步操作并注册一个回调函数以在操作完成后执行,这种注册发生在事件循环中。

简而言之,事件循环知道在异步操作结束时执行哪个回调函数。但那是另一个线程:)


回到Lambda

鉴于上述信息,lambda 不应在达到空事件循环之前停止 - 因为这意味着一些后续过程不会在一些异步之后执行操作返回。

如果您仍然需要手动停止执行怎么办?不管事件循环状态如何?在函数的开头,执行:

context.callbackWaitsForEmptyEventLoop = false

然后使用您在处理程序签名中获得的第三个参数。这是回调

回调参数

这是一个当你想结束执行时调用的函数。

如果您不带任何参数调用它,或者第一个参数为 null,文本作为第二个参数 - 它被认为是成功的调用。

要使 lambda 执行失败,您可以使用一些非空值作为第一个参数来调用回调函数。

关于javascript - 进程超时 |亚马逊 Lambda 到 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38560186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com