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()
};