以中英文请教的复习

大多 古地块 API 安排于习惯法的异步事件驱车旅行架构,在位的少量的典型的不赞成(也称为起动装置),Emitter)会跳过命名事件来援引职务(也叫监听器,等着听者)。

像, 会在每回有新衔接时跳过事件, 会在翻开排成一行行走时跳过事件,stream会在资料可读时跳过事件。

人称代名词财产能跳过事件的不赞成都是 EventEmitter 类的窥测。
这些灵有一 () 职务,用于将一或多个职务绑定到命名事件上。
事件的命名通常是驼峰式的字母串。

EventEmitter 不赞成跳过一事件时,人称代名词财产绑定在该事件上的职务大都市被同时存在的地援引。

要求,一简略的 EventEmitter 窥测,绑定侦听器。
() 用于已自动记载器的侦听器, () 用于跳过事件。

const EventEmitter = 需求(事件)

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
(事件), () => {
  (''跳过事件'');
});
(事件));

将限度局限因素和 this 把它传给监控#

以中英文请教的复习

() 方式可以将恣意数的限度局限因素使分娩给侦听器职务。
当援引listener职务时, this 保留字将定位到侦听器绑定 EventEmitter 窥测。

const myEmitter = new MyEmitter();
(事件), 职务(A), b) {
  (a, b, this, this === myEmitter);
  // 捣碎:
  //   a b MyEmitter {
  //     domain: null,
  //     _events: { event: [职务] },
  //     _eventsCount: 1,
  //     _maxListeners: undefined } true
});
(事件), A, ''b'');

也可以应用 ES6 箭镟用作侦听器。但 this 保留字未辨向 EventEmitter 窥测:

const myEmitter = new MyEmitter();
(事件), (a, b) => {
  (a, b, 这)
  // 捣碎: a b {}
});
(事件), A, ''b'');

异步 VS 同时存在的#

以中英文请教的复习

EventEmitter 人称代名词财产侦听器按它们是对齐的按次同时存在的援引。。
到这地步必然要确保事件的排序特赞,预防竞赛期限。
可以应用 setImmediate()() 切换到异步典型:

const myEmitter = new MyEmitter();
(事件), (a, b) => {
  setImmediate(() => {
    (异步)
  });
});
(事件), A, ''b'');

仅处置事件一次#

以中英文请教的复习

应用时 () 自动记载器的侦听器,监听器会在每回跳过命名事件时被援引。

const myEmitter = new MyEmitter();
let m = 0;
(事件), () => {
  (++m);
});
(事件));
// 捣碎: 1
(事件));
// 捣碎: 2

应用 ce() 您可以自动记载器至多一次援引的侦听器。
当事件被跳过时,侦听器将被抵消,那么召集。

const myEmitter = new MyEmitter();
let m = 0;
ce(事件), () => {
  (++m);
});
(事件));
// 捣碎: 1
(事件));
// 无起动装置

不正确的事件#

以中英文请教的复习

EventEmitter 当窥测不及格时,本应跳过 不正确的 事件。

免得没光明 不正确的 事件自动记载器监听器,则当 不正确的 事件跳过时,不正确的会被投射、捣碎堆栈后面的、并放弃 男高音的。

const myEmitter = new MyEmitter();
(不正确的, new 不正确的(不正确的音讯)
// 投错

转移坍塌 男高音的,可以应用 domain 模块。
(但请坚持到底),不使整洁应用 domain 模块。)

作为姣姣者达到,它本应这先前是 不正确的 事件自动记载器监听器。

const myEmitter = new MyEmitter();
(不正确的, (不正确的) => {
  ('不正确的音讯')
});
(不正确的, new 不正确的(不正确的音讯)
// 捣碎: 不正确的信息

EventEmitter 类#

以中英文请教的复习

新增于:

EventEmitter 类由 events 模块限界:

const EventEmitter = 需求(事件)

添加新的侦听器时,会跳过 ''newListener'' 事件;用力打现存的侦听器时,则跳过 ''removeListener'' 事件。

”newListener” 事件#

以中英文请教的复习

新增于:

EventEmitter 窥测在新的监听器被添加到其救济院内的监听器障碍物在前,它自己跳过。 ''newListener'' 事件。

''newListener'' 事件自动记载器的监听器将使分娩事件著名的人物和对要添加的监听器的援用。

在添加监听器在前跳过事件的证书具有狡猾的但要紧的反作用:在 ''newListener'' 在回调中自动记载器同族关系的 name 普通的静止侦听器都将在添加前拔出。。

const myEmitter = new MyEmitter();
// 只处置一次,预防许许多多的圆状物。
ce(''newListener'', (事件), 等着听者) => {
  if (事件) === 事件 {
    // 在前面拔出新的侦听器。
    (事件), () => {
      (''B'');
    });
  }
});
(事件), () => {
  (a)
});
(事件));
// 捣碎:
//   B
//   A

”removeListener” 事件#

以中英文请教的复习

''removeListener'' 事件在 listener 用力打后跳过。

(幻灯机), eventName)#

眼前没英汉对照。

新增于: 废弃于: v4.0.0

A class method that returns the number of listeners for the given eventName
registered on the given emitter.

const myEmitter = new MyEmitter();
(事件), () => {});
(事件), () => {});
((myEmitter, 事件);
// Prints: 2

#

以中英文请教的复习

新增于:

默许限度局限下,每个事件可以自动记载器至多 10 个监听器。
可以应用 (n) 方式更改人称代名词 EventEmitter 窥测的限度局限。
可以应用 属性整个更改 EventEmitter 窥测的默许值。

设置 要拘谨,由于它星力着各种的。 EventEmitter 窥测,包罗先前引起的。
到这地步,优先于应用 (n) 而失去嗅迹

限度局限否决票绝对的。
EventEmitter 窥测可以添加超越限度局限的侦听器,但它会去 stderr 输入后面的正告,暗示检测可能性的内存走漏。
一对一的 EventEmitter 窥测,可以应用 ()() 临时性距离正告:

(() + 1);
(事件), () => {
  // 做少量的手术
  ((() - 1, 0));
});

--trace-warnings 命令行评分可用于显示此类正告的堆栈后面的。

跳过的正告可以经过 (正告) 停止反省,还要静止的 emittertypecount 属性,区别辨向事件起动装置窥测、事件著名的人物、又附加监控的数。
name 属性设置为 ''MaxListenersExceededWarning''

(事件)Name, 等着听者)#

以中英文请教的复习

新增于:

(事件)Name, 等着听者) 的别号。

(事件)Name[, 阿格斯#

以中英文请教的复习

新增于:

按侦听器自动记载器的按次,同时存在的援引每个自动记载器著名的人物 eventName 的事件的监听器,并使分娩所预备的限度局限因素。

免得事件有监听器,那么归来 true,否那么归来 false

()#

以中英文请教的复习

新增于:

归来已自动记载器监听器的事件名障碍物。
障碍物打中值是字母串或 Symbol

const EventEmitter = 需求(事件)
const myEE = new EventEmitter();
(Foo), () => {});
(酒吧), () => {});

const sym = 作记号(‘作记号’)
(赛姆, () => {});

(());
// 捣碎: [ 福, 酒吧, Symbol(赛姆bol) ]

()#

以中英文请教的复习

新增于:

归来 EventEmitter 赠送最大侦听器限度局限的值,此值可以应用 (n) 设置或默许为

(事件)Name)#

以中英文请教的复习

新增于:

归来被监督的著名的人物 eventName 的事件的监听器的数。

(事件)Name)#

以中英文请教的复习

归来以命名 eventName 的事件的监听器障碍物的正本。

(衔接), (流) => {
  (衔接)
});
(((衔接))));
// 捣碎: [ [职务] ]

(事件)Name, 等着听者)#

以中英文请教的复习

新增于: v10.0.0

() 的别号。

(事件)Name, 等着听者)#

以中英文请教的复习

新增于:

添加 listener 职务到著名的人物 eventName 的事件的监听器障碍物的末了。
不见得反省 listener 条件已添加?。
屡次呼叫并传入同一 eventNamelistener 会致使 listener 将添加屡次。

(衔接), (流) => {
  (衔接)
});

回到合适的 EventEmitter 的援用,大意是停止旋球。

默许限度局限下,事件监听器会禀承添加的按次授权援引。
() 方式可用于将事件监听器添加到监听器障碍物的开始。

const myEE = new EventEmitter();
(Foo), () => (A));
(Foo), () => (''b''));
(Foo));
// 捣碎:
//   b
//   a

(事件)Name, 等着听者)#

以中英文请教的复习

新增于:

添加独自地侦听器 listener 到名为 eventName 的事件。
eventName 事件下次跳过时,将率先用力打侦听器,那么召集。

ce(衔接), (流) => {
  (最初的呼叫)
});

回到合适的 EventEmitter 的援用,大意是停止旋球。

默许限度局限下,事件监听器会禀承添加的按次授权援引。
() 方式可用于将事件监听器添加到监听器障碍物的开始。

const myEE = new EventEmitter();
ce(Foo), () => (A));
(Foo), () => (''b''));
(Foo));
// 捣碎:
//   b
//   a

(事件)Name, 等着听者)#

以中英文请教的复习

新增于:

添加 listener 职务到著名的人物 eventName 的事件的监听器障碍物的开始。
不见得反省 listener 条件已添加?。
屡次呼叫并传入同一 eventNamelistener 会致使 listener 已添加屡次。

(衔接), (流) => {
  (衔接)
});

回到合适的 EventEmitter 的援用,大意是停止旋球。

(事件)Name, 等着听者)#

以中英文请教的复习

新增于:

添加独自地侦听器 listener 到名为 eventName 的事件的监听器障碍物的开始。
eventName 事件下次跳过时,将率先用力打侦听器,那么召集。

(衔接), (流) => {
  (最初的呼叫)
});

回到合适的 EventEmitter 的援用,大意是停止旋球。

([eventName])#

以中英文请教的复习

新增于:

用力打人称代名词财产侦听器或约定 eventName 事件的监听器。

坚持到底,用力打加密中静止地方添加的侦听器是一种可惜的做法,最最 EventEmitter 当窥测由静止子群或模块(如SOC)引起时。

回到合适的 EventEmitter 的援用,大意是停止旋球。

(事件)Name, 等着听者)#

以中英文请教的复习

新增于:

从…的名字 eventName 的事件在侦听器障碍物中移除约定的 listener

const callback = (流) => {
  (衔接)
};
(衔接), 回调)
// ...
(衔接), 回调)

removeListener() 至多从侦听器障碍物中用力打一侦听器。
免得将侦听器添加到约定的次数 eventName 在侦听器障碍物中,必然要打很屡次话筒 removeListener() 用力打人称代名词财产窥测。

一旦事件被跳过,人称代名词财产绑定到该事件的监听器大都市按按次授权援引。
这述语,在事件跳过后来、在手段最末一侦听器在前, removeListener()removeAllListeners() 不见得从 emit() 将它们从。

const myEmitter = new MyEmitter();

const callbackA = () => {
  (a)
  (事件), callbackB);
};

const callbackB = () => {
  (''B'');
};

(事件), callbackA);

(事件), callbackB);

// callbackA 用力打侦听器 callbackB,但它依然会高地。。
// 当被跳过时,监听器的救济院内的障碍物是 [callbackA, callbackB]
(事件));
// 捣碎:
//   A
//   B

// callbackB 如今移除。
// 救济院内的侦听器障碍物是 [callbackA]
(事件));
// 捣碎:
//   A

由于侦听器是应用救济院内的障碍物支撑的,故此,援引它将更改自动记载器AFTE的普通的侦听器的放置标志。
这不见得星力援引侦听器的按次。,但这述语它需求被 () 方式归来的侦听器障碍物的普通的正本。

免得独自地职务作为处置顺序屡次添加为独自地事件(列举如下例所示),则 removeListener() 将用力打重新添加的窥测。
在这要求中,用力打侦听器 一倍(平)

const ee = new EventEmitter();

function pong() {
  (桌球运动)
}

(平), 桌球运动球)
ce(平), 桌球运动球)
(平), 桌球运动球)

(平));
(平));

回到合适的 EventEmitter 的援用,大意是停止旋球。

(n)#

以中英文请教的复习

新增于:

默许限度局限下,免得为假设的事件添加了超越 10 个监听器,则 EventEmitter 将捣碎正告。
这有助于检测内存走漏。
又,否决票是人称代名词财产的事件都要限度局限 10 个监听器。
() 可以约定方式 EventEmitter 窥测修正限度局限。
值设为 Infinity(或 0表现不受限度局限的侦听器的数量。

回到合适的 EventEmitter 的援用,大意是停止旋球。

(事件)Name)#

以中英文请教的复习

新增于:

归来 eventName 事件的监听器障碍物的拷贝,包罗封装的监听器(像由 .once() 引起的)。

const emitter = new EventEmitter();
(''log'', () => (''只记载一次''));

// 归来一障碍物,象征了一封装了 `listener` 方式的监听器。
const listeners = (日记)
const logFnWrapper = listeners[0];

// 捣碎 “只记载一次”,但不见得解绑 `once` 事件。
();

// 捣碎 “只记载一次”,且移除监听器。
logFnWrapper();

(''log'', () => (''继续地记载''));
// 归来一障碍物,只象征 `.on()` 绑定的监听器。
const newListeners = (日记)

// 捣碎两遍 “继续地记载”。
newListeners[0]();
(日记)

发表评论

电子邮件地址不会被公开。 必填项已用*标注