Takehiro Tada
Table of Contents
はじめに
こんにちは、最近は TypeScript を触ることが多くなってきた夛田です。 今回は、Node.js16 からサポートされた Sleep 機能について書いてみようと思います。 Node.js16 は 2021/10/26 より LTS となりますので、そろそろ新機能をしっかり追っておきたいところですね。
参考: https://nodejs.org/ja/about/releases/
えっ、まだ setTimeout で消耗してるの!?
これまで Node.js でいわゆる「待ち」の処理を行うには setTimeout を利用することが多かったかと思われます。 また、この関数を async function で利用するためには次のように Promise でラップする必要がありました。
// いい感じにPromiseでラップする
const sleepFunc = (m) => {
return new Promise((resolve) => setTimeout(resolve, m));
};
// 実際に使う時
const hoge = async () => {
console.log("すたーと!");
// こんな感じで使う
await sleepFunc(100);
console.log("えんど!");
}
そこで登場した Timers Promiss API
こういうめんどくさいことをしていたあなたに朗報です。 Node.js16 では Timers Promiss API が登場しました。これを利用すると自分でラップせずとも「待ち」の処理が実装できます。
※ 正確に言うと本 API は Node.js15 の時点で存在し、Experimental 状態だったわけだが今回 Node.js16 で Stable になった。
参考: https://nodejs.org/api/timers.html#timers_timers_promises_api
やってみた
実際に使う時はこんな感じです。
// timers/promisesをロード
const { setTimeout } = require('timers/promises');
const hoge = async () => {
console.log("すたーと!");
await setTimeout(100);
console.log("えんど!");
}
便利ですねー 幸せになりました!
さいごに
今後プロジェクトが Node.js16 を採用している場合、積極的に使っていこうと思いました。 setTimeout だけではなく setInterval もサポートしているみたいですので色々と使い所がありそうです。
Takehiro Tada
よくTypeScript書いてる人