こうこく
作 ▸
改 ▸

JavaScriptでsleep (setTimeout + Promise)

[2024-01-28追記] Node.jsの場合、v15以降なら timersPromises.setTimeout でできます。

const { setTimeout } = require('timers/promises');

(async() => {
  console.time();
  await setTimeout(3000);
  console.timeEnd();
  // -> default: 3.004s
})();
TypeScriptの場合
import { setTimeout } from 'timers/promises';

それ以外の場合、Promise化した setTimeout() でsleepのようなことができます。普通に .then() で使ってもただの setTimeout() でしかないので、await をつけて呼びます。

/**
 * sleepもどき
 * @param {Number} ms ミリ秒
 * @returns {Promise}
 */
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

(async() => {
  console.time();
  await sleep(3000);
  console.timeEnd();
  // -> default: 3002.119140625 ms
})();
TypeScriptの場合
const sleep = (ms: number): Promise<void> => new Promise(resolve => setTimeout(resolve, ms));
この記事に何かあればこちらまで (非公開)