序文#
実際の開発では、非同期操作で「遅延」操作が必要な場面によく遭遇します。通常、以下のような 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 公式ドキュメントを参照してください。