У меня есть AWS Lambda-приложение, построенное на внешней библиотеке, содержащей EventEmitter. На определенное событие мне нужно сделать HTTP-запрос. Итак, я использовал этот код (упрощенно):
myEmitter.on("myEvent", async() => {
setup();
await doRequest();
finishingWork();
});
Я понимаю, что происходит следующее:
Мой обработчик вызывается, но как только вызывается функция doRequest
, Обещание возвращается, и EventEmitter продолжается со следующими обработчиками. Когда все это будет сделано, работа обработчика может продолжиться (finishingWork
).
Это работает локально, потому что мой процесс NodeJS продолжает работать и обрабатываются все оставшиеся события в eventl oop. Странно то, что это не работает на AWS Lambda. Даже если для context.callbackWaitsForEmptyEventLoop
установлено значение true.
В моем журнале я вижу, что мой обработчик входит в функцию doRequest
, но ничего после того, как я вызываю библиотеку для выполнения HTTP-вызова (request-promise
, который использует request
). И код не продолжается, когда я делаю другой запрос (который я ожидаю, если для callbackWaitsForEmptyEventLoop
установлено значение false, а это не так).
Кто-нибудь испытывал нечто подобное и знает, как выполнить асинхронный HTTP-запрос в обработчике источника событий NodeJS, на AWS Lambda?