mirror of
https://github.com/nodejs/node.git
synced 2025-05-07 00:23:34 +00:00

A handful of modules (including readable-streams) make inappropriate use of the internal _events property. One such use is to prepend an event listener to the front of the array of listeners. This adds EE.prototype.prependListener() and EE.prototype.prependOnceListener() methods to add handlers to the *front* of the listener array. Doc update and test case is included. Fixes: https://github.com/nodejs/node/issues/1817 PR-URL: https://github.com/nodejs/node/pull/6032 Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com> Reviewed-By: Brian White <mscdex@mscdex.net>
42 lines
940 B
JavaScript
42 lines
940 B
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const EventEmitter = require('events');
|
|
const assert = require('assert');
|
|
|
|
const myEE = new EventEmitter();
|
|
var m = 0;
|
|
// This one comes last.
|
|
myEE.on('foo', common.mustCall(() => assert.equal(m, 2)));
|
|
|
|
// This one comes second.
|
|
myEE.prependListener('foo', common.mustCall(() => assert.equal(m++, 1)));
|
|
|
|
// This one comes first.
|
|
myEE.prependOnceListener('foo', common.mustCall(() => assert.equal(m++, 0)));
|
|
|
|
myEE.emit('foo');
|
|
|
|
|
|
// Test fallback if prependListener is undefined.
|
|
const stream = require('stream');
|
|
const util = require('util');
|
|
|
|
delete EventEmitter.prototype.prependListener;
|
|
|
|
function Writable() {
|
|
this.writable = true;
|
|
stream.Stream.call(this);
|
|
}
|
|
util.inherits(Writable, stream.Stream);
|
|
|
|
function Readable() {
|
|
this.readable = true;
|
|
stream.Stream.call(this);
|
|
}
|
|
util.inherits(Readable, stream.Stream);
|
|
|
|
const w = new Writable();
|
|
const r = new Readable();
|
|
r.pipe(w);
|