當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Node.js events.on(emitter, eventName[, options])用法及代碼示例

events.on(emitter, eventName[, options])

添加於:v13.6.0、v12.16.0

參數
const { on, EventEmitter } = require('node:events');

(async () => {
  const ee = new EventEmitter();

  // Emit later on
  process.nextTick(() => {
    ee.emit('foo', 'bar');
    ee.emit('foo', 42);
  });

  for await (const event of on(ee, 'foo')) {
    // The execution of this inner block is synchronous and it
    // processes one event at a time (even with await). Do not use
    // if concurrent execution is required.
    console.log(event); // prints ['bar'] [42]
  }
  // Unreachable here
})();

返回迭代 eventName 事件的 AsyncIterator。如果 EventEmitter 發出 'error' ,它將拋出。它在退出循環時刪除所有偵聽器。每次迭代返回的value 是一個由發出的事件參數組成的數組。

<AbortSignal> 可用於取消等待事件:

const { on, EventEmitter } = require('node:events');
const ac = new AbortController();

(async () => {
  const ee = new EventEmitter();

  // Emit later on
  process.nextTick(() => {
    ee.emit('foo', 'bar');
    ee.emit('foo', 42);
  });

  for await (const event of on(ee, 'foo', { signal: ac.signal })) {
    // The execution of this inner block is synchronous and it
    // processes one event at a time (even with await). Do not use
    // if concurrent execution is required.
    console.log(event); // prints ['bar'] [42]
  }
  // Unreachable here
})();

process.nextTick(() => ac.abort());

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 events.on(emitter, eventName[, options])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。