Node.js ではイベントから非同期イテレータを生成できる2021年12月02日 23時37分

この記事は JavaScript アドベントカレンダーの 2 日目の分です。


Node.js の Events モジュールでは、events.on メソッドを提供しています (EventEmitter オブジェクトの on メソッドとは別物です)。これは、イベントが列挙されるような非同期イテレータを生成するものです。第 1 引数にイベントを発生させる EventEmitter オブジェクトまたは EventTarget オブジェクトを、第 2 引数に列挙したいイベントの名前を指定します。

以下の例では、実行すると 1 秒後と 3 秒後にそれぞれ「foo イベントが発生しました」と出力されます。

// events-on.mjs

import { on } from 'events';

const target = new EventTarget();
setTimeout(() => {
  target.dispatchEvent(new Event('foo'));
}, 1000);
setTimeout(() => {
  target.dispatchEvent(new Event('foo'));
}, 3000);

(async () => {
  for await (const [event] of on(target, 'foo')) {
      console.log(`${event.type} イベントが発生しました。`)
  }
})();

RxJS の Observable.fromEvent メソッドと機能が似ていますね。

ブラウザ上でも使えると面白い書き方ができるのかもしれませんが、Events モジュールのブラウザ用実装では events.on メソッドに対応していません。issue は立っており、作業ブランチも存在するものの、半年以上動きがなさそうです。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
「ハイパーテキストマークアップ言語」をアルファベット4文字でいうと?

コメント:

トラックバック

このエントリのトラックバックURL: http://nanto.asablo.jp/blog/2021/12/02/9445038/tb