Вы забыли что-то вернуть лямбде:
exports.handler = async (event) => {
var messages = [];
event.Records.forEach(function(messageId, body) {
//options object created from some stuff
messages.push(getEndpoint(options));
});
await Promise.all(messages);
return 'OK'
};
это также должно работать:
exports.handler = (event) => { // async is not mandatory here
var messages = [];
event.Records.forEach(function(messageId, body) {
//options object created from some stuff
messages.push(getEndpoint(options));
});
return Promise.all(messages); // returning a promise
};
и вы можете использовать карту:
exports.handler = (event) => { // async is not mandatory here
const messages = event.Records.map(function(messageId, body) {
//options object created from some stuff
return getEndpoint(options)
});
return Promise.all(messages); // returning a promise
};
Чтобы понять, почему это происходит, вы должны немного погрузиться в реализацию лямбды: она по существу будет ждать очистки стека функций, и, поскольку вы вообще ничего не возвращали, стек функций опустел сразу после того, как он был поставлен в очередь. все вещи - добавление простого возврата после вызова await
делает стек fn НЕ пустым, что означает, что лямбда будет ждать его завершения.
Если вы запустите это на стандартном узле, ваша функция также вернется до того, как обещания будут завершены, НО процесс вашего узла НЕ завершится, пока стек не будет очищен. Вот где лямбда расходится со стоковым узлом.