LoginSignup
1
1

More than 3 years have passed since last update.

EventEmitterですべてのイベントを取得する(ワイルドカード)

Last updated at Posted at 2019-12-04

Node.jsのEventEmitterは便利なんですがすべてのイベントを取得できません。
何で実装していないのかよくわかりません。

EventEmitter2というEventEmitterを便利にしたものがありこれを使えば良いのですが、更新が止まっています...

頑張ればできるんじゃねと思って書いたら数分でできたのメモ的な意味を込めて記事にしてます。

WildEventEmitter作りました、この記事の内容をモジュール化しただけなのでめんどいなって思った人がいたら使ってください.(tsだと型エラーうるさいのでやめたほうがいいです いい方法教えて

コード

index.js
// いつものEventEmitter
const EventEmitter = require("events");

// いつものEventEmitterを拡張
class ExtendEventEmitter extends EventEmitter {
    // emitされた内容を"*"に再emit
    emit(name, ...args) {
        return super.emit("*", name, ...args);
    }
}

// 拡張したEventEmitter
const event = new ExtendEventEmitter();

// ワイルドカードでイベントを受ける
event.on("*", (name, ...callback) => {
    console.log(`name: ${name} |`, ...callback);
});

/* emit */
event.emit("ready", "ready...");

event.emit("number", 1, 2, 3, 4);

event.emit("array", ["a", "b"]);

event.emit("object", { "abc": 123, "def": 456 });

結果

name: ready  | ready...
name: number | 1 2 3 4
name: array  | [ 'a', 'b' ]
name: object | { abc: 123, def: 456 }
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1