gpt4 book ai didi

node.js - AWS Lambda 上 NodeJS EventEmitter 中的异步函数

转载 作者:行者123 更新时间:2023-12-03 12:19:34 32 4
gpt4 key购买 nike

我有一个基于包含 EventEmitter 的外部库构建的 AWS Lambda 应用程序。在某个事件中,我需要发出 HTTP 请求。所以我使用了这个代码(简化):

myEmitter.on("myEvent", async() => {
setup();
await doRequest();
finishingWork();
});

我的理解是这样的:

我的处理程序被调用,但是一旦 doRequest 函数被调用,就会返回一个 Promise 并且 EventEmitter 继续处理下一个处理程序。当所有这些都完成后,处理程序的工作可以继续( finishingWork )。

这在本地有效,因为我的 NodeJS 进程一直在运行,并且处理 eventloop 上的任何剩余事件。奇怪的是,这似乎不适用于 AWS Lambda。即使 context.callbackWaitsForEmptyEventLoop 设置为 true。

在我的日志记录中,我可以看到我的处理程序进入了 doRequest 函数,但是在我调用库进行 HTTP 调用(使用 request-promiserequest )之后什么也没有。当我发出另一个请求时,代码不会继续(如果 callbackWaitsForEmptyEventLoop 设置为 false,我会期望它不是)。

有没有人经历过类似的事情并且知道如何在 AWS Lambda 上的 NodeJS 事件发射器的处理程序中执行异步 HTTP 请求?

最佳答案

如果您知道如何解决此问题,请随时添加另一个答案。但就目前而言,我们的“解决方案”是将事件处理程序代码放在我们代码库的其他地方。这样,它是异步执行的。

我们能够做到这一点,因为只有一个地方可以发出事件,但事件处理程序的方式会是一种更简洁的解决方案。不幸的是,这似乎不可能。

关于node.js - AWS Lambda 上 NodeJS EventEmitter 中的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61223423/

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