Top View


Author Takehiro Tada

Node.js16 で Sleep 機能がサポートされたらしい

2021/09/09

はじめに

こんにちは、最近は 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

Takehiro Tada

よくTypeScript書いてる人