lambda で、 setTimeout を利用する場合、何も意識しない場合 lambda の実行が終わってしまいます。
それを待つには、 await を使う方法がパッと思いつきますが、 callback を使っても待つことが出来ます。
await を利用するパターン
Promise を使って書きます。
exports.handler = async (event, context, callback) => {
await new Promise(resolve => {
setTimeout(() => {
console.log('waited!!!!!!!!!!!!')
resolve();
}, 2000);
});
};
callback を利用するパターン
callback メソッドは、実行前に node のイベントループが空になるまで待つようになっているので、 setTimeout が終わるまで待ちます。
( callbackWaitsForEmptyEventLoop がデフォルトだと true なので )
https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html
exports.handler = async (event, context, callback) => {
setTimeout(() => {
console.log('waited!!!!!!!!!!!!')
}, 2000);
callback()
};