AWS Lambda 上的 NodeJS EventEmitter 中的异步函数

Pet*_*ter 5 node.js eventemitter aws-lambda

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

myEmitter.on("myEvent", async() => {
    setup();
    await doRequest();
    finishingWork();
});
Run Code Online (Sandbox Code Playgroud)

据我了解,发生的情况是这样的:

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

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

在我的日志记录中,我可以看到我的处理程序进入了该doRequest函数,但在我调用库进行 HTTP 调用(request-promise使用request)后没有任何内容。当我发出另一个请求时,代码不会继续(我希望如果callbackWaitsForEmptyEventLoop设置为 false,但事实并非如此)。

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

Pet*_*ter 2

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

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