Проблема в том, что вы смешиваете свои узлы лямбда-узла node.js.
Либо вы используете асинхронную функцию и возвращаете или бросаете:
exports.handler = async (event,context,callback) => {
// code goes here.
await FIREhose.putRecord(params).promise();
return null; // or whatever result.
};
или вы используете метод обратного вызова:
exports.handler = (event,context,callback) => {
// code goes here.
FIREhose.putRecord(params)
.promise();
.then((data) => {
// do stuff with data.
// n.b. you could have used the cb instead of a promise here too.
callback(null, null); // or whatever result.
});
};
(есть третий способ использования context.
, но это очень устаревший способ).
Это все из-за того, как работает лямбда и определяет, когда был ответ.
В вашем первом примере (без обратного вызова) lambda ожидает, что ваш обработчик вернет обещание, которое он должен ждать для разрешения / отклонения, что, в свою очередь, будет ответом. Однако вы не возвращаете обещание (undefined
), поэтому ждать нечего, и оно немедленно возвращается - вполне вероятно, до того, как завершится вызов putRecord.
Когда вы использовали callback
, вы явно сказали лямбде, что используете «старый» способ. Интересная особенность подхода callback
заключается в том, что ожидает завершения цикла событий узла (по умолчанию). Это означает, что .putRecord
, вероятно, завершится.