async/awaitでsleep処理を書く

公開日時
更新日時

jsでsleepをしたい場合、setTimeoutを使う。

(() => {
  console.log('sleep');
  setTimeout(() => {
    console.log('wake up');
    
    console.log('sleep again');
    setTimeout(() => {
      console.log('wake up');
    }, 3000);
  }, 3000);
})();

が、複数回sleepをしたい場合にcallback地獄になってしまう。

そこで、Promiseを返すようにしてasync/awaitでsleep処理を書き直すと上から順にコードを読んでいけるので分かりやすくなる。

const sleep = msec => {
  return new Promise(resolve => {
    setTimeout(resolve, msec);
  });
};
  
(async () => {
  console.log('sleep');
  await sleep(3000);
  console.log('wake up');
  
  console.log('sleep again');
  await sleep(3000);
  console.log('wake up');
})();

参考


Related #js

AWS SESの受信メールを暗号化してs3に保存しLambdaで読み込む

jsの場合、複合処理を独自実装する必要がある

Next.jsのPreview Mode時はAnalyticsを無効化する

cookieの__next_preview_dataキーで判定

Next.js 11

手軽にアップグレードできた

VSCode Remoteで新規ファイルを作った際にTypescriptのPathが認識されない問題

「Ctrl + Shift + P」でコマンドパレットを開いて「Reload Window」を実行