こうこく
作 ▸
改 ▸

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));
作 ▸

Gulpで変更監視してWebpackでバンドルする

  • すでにGulpでLessをコンパイルしてるところに別件でWebpackを追加したけど
  • べつにCSSはバンドルしてくれなくていいし
  • 監視はGulpとWebpackどっちかに寄せたいけど、バンドラの仕事じゃない気がするからGulpに寄せたい

みたいな状況になったので

Node.js v12.13.0gulp 4.0.2webpack 4.41.2
作 ▸

JavaScript escape()が非推奨らしいので自作

JavaScriptの escape() は非推奨というか、将来的に無くなるから、今後は使わない方がいいみたいです。ブラウザによって実装が違いすぎるからみたいです。

しかし先程、たまたま欲しくて探してたコードをネットで見つけたと思ったら escape() が使われていて、しかも encodeURI() とか encodeURIComponent() に書き換えたら動かなくなるやつでした。なので自力で escape() を書いてみました。

Chrome 78.0.3904.97
作 ▸
改 ▸

JavaScript Blob, TypedArray, 文字列, Canvas, Imageとか周りの変換まとめ

  • Blob (≒ File)
  • ArrayBuffer
  • Buffer
  • TypedArray (Uint8Array, Uint16Array, Uint32Array)
  • Canvas (HTMLCanvasElement)
  • Image (HTMLImageElement)
  • 文字列 (普通の文字列, Base64文字列, バイナリ文字列)

JavaScriptの、ここらへん同士の変換方法をむやみやたらにまとめてます。

[2022-02-27 追記] 全体の見直しを行いました。また、コメントを参考に一部の関数 (uint8ArrayToUint16Array, uint8ArrayToUint32Array) を修正しました。ご指摘くださりありがとうございました。