events: unwrap #once listeners in #listeners
Fixes: https://github.com/nodejs/node/issues/6873 PR-URL: https://github.com/nodejs/node/pull/6881 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
1b99093df7
commit
b7a8a691b4
@ -425,9 +425,9 @@ EventEmitter.prototype.listeners = function listeners(type) {
|
|||||||
if (!evlistener)
|
if (!evlistener)
|
||||||
ret = [];
|
ret = [];
|
||||||
else if (typeof evlistener === 'function')
|
else if (typeof evlistener === 'function')
|
||||||
ret = [evlistener];
|
ret = [evlistener.listener || evlistener];
|
||||||
else
|
else
|
||||||
ret = arrayClone(evlistener, evlistener.length);
|
ret = unwrapListeners(evlistener);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -475,3 +475,11 @@ function arrayClone(arr, i) {
|
|||||||
copy[i] = arr[i];
|
copy[i] = arr[i];
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function unwrapListeners(arr) {
|
||||||
|
const ret = new Array(arr.length);
|
||||||
|
for (var i = 0; i < ret.length; ++i) {
|
||||||
|
ret[i] = arr[i].listener || arr[i];
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -36,3 +36,16 @@ function listener2() {}
|
|||||||
assert.deepStrictEqual(ee.listeners('foo'), [listener, listener2]);
|
assert.deepStrictEqual(ee.listeners('foo'), [listener, listener2]);
|
||||||
assert.deepStrictEqual(eeListenersCopy, [listener]);
|
assert.deepStrictEqual(eeListenersCopy, [listener]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const ee = new events.EventEmitter();
|
||||||
|
ee.once('foo', listener);
|
||||||
|
assert.deepStrictEqual(ee.listeners('foo'), [listener]);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const ee = new events.EventEmitter();
|
||||||
|
ee.on('foo', listener);
|
||||||
|
ee.once('foo', listener2);
|
||||||
|
assert.deepStrictEqual(ee.listeners('foo'), [listener, listener2]);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user