[JavaScript] Promiseを使ったsleep

2018年12月10日月曜日

JavaScript

JavaScriptのasync/awaitを調べていたら、MDNにsleepを簡潔に書けそうな例があった。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Using_promises

sleepの簡潔な記法

async/awaitを使うと、こんな感じで非同期処理の待ちを簡潔に書ける。
試した環境はnode.js v10.13.0

const wait = ms => new Promise(resolve => setTimeout(resolve, ms));

async function runAsync() {
  try {
    console.log('sleep...');
    await wait(3000);
//    await Promise.reject('Error!');
    console.log('woke up!');
  } catch (e) {
    console.log(e);
  }

  return 'complete!';
}

console.log('before');
runAsync().then((resolve) => {
  console.log(resolve);
})
console.log('after');
before
sleep...
after
(3秒経過)
woke up!
complete!

async/awaitのいいところは、非同期処理の待ちと例外捕捉をコールバックを使わないで、直感的な記法で書けるところ。

例外処理

7行目のPromise.rejectのコメントを外すと、非同期処理中のエラーを拾ってawaitが例外を送出してくれる。
before
sleep...
after
(3秒経過)
Error!
complete!