序文#
実際の開発では、非同期操作で「遅延」操作が必要な場面によく遭遇します。通常、以下のような util 関数を作成して処理を行います。
const delay = (ms: number) => new Promise((r) => setTimeout(r, ms));
これは非常に良く、簡潔であり、私たちのニーズに完璧に合っています。ただし、コードが純粋な node 環境で実行される場合、考慮すべき新しい代替案があります。
node の Timers Promises API を使用する#
v15.0.0 以降、node には組み込みの Timers Promises API があり、setTimeout関数を提供しています。これは、先ほど説明した遅延関数とほぼ同じ動作をするPromiseを返します。さらに、さまざまな使い方に対応しています。
import { setTimeout } from 'node:timers/promises'
const sayHi = async () => {
  console.log('Hi!')
}
const doSomethingAsync = async () => {
  console.log('yolo!')
  
  await setTimeout(1000)
  await sayHi()
  const res = await setTimeout(1000, 'result');
  console.log("res is: ", res)
}
doSomethingAsync()
上記のコードの出力結果は次のとおりです。
yolo! # 即座に出力
Hi! # 1秒後に出力
res is:  result # さらに1秒後に出力
詳細については、Node.js 公式ドキュメントを参照してください。

