Skip to content

Commit a3c04ca

Browse files
committed
Fix emitSerial() not delivering events to async iterators
Fixes #126
1 parent cfde903 commit a3c04ca

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

β€Žindex.jsβ€Ž

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,10 +405,12 @@ export default class Emittery {
405405

406406
this.logIfDebugEnabled('emitSerial', eventName, eventData);
407407

408+
enqueueProducers(this, eventName, eventData);
409+
408410
const listeners = getListeners(this, eventName) ?? new Set();
409411
const anyListeners = anyMap.get(this);
410412
const staticListeners = [...listeners];
411-
const staticAnyListeners = [...anyListeners];
413+
const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners];
412414

413415
await resolvedPromise;
414416
/* eslint-disable no-await-in-loop */

β€Žtest/index.jsβ€Ž

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,48 @@ test('emitSerial() - calls listeners subscribed when emitSerial() was invoked',
797797
t.deepEqual(calls, [1, 1, 2, 3, 2, 4, 5, 2, 4, 7, 6, 2, 4, 7, 6, 9, 2, 4, 7, 6, 9]);
798798
});
799799

800+
test.serial('emitSerial() - delivers events to events() iterator', async t => {
801+
const emitter = new Emittery();
802+
const iterator = emitter.events('πŸ¦„');
803+
804+
await emitter.emitSerial('πŸ¦„', '🌈');
805+
setTimeout(() => {
806+
emitter.emitSerial('πŸ¦„', Promise.resolve('🌟'));
807+
}, 10);
808+
809+
t.plan(3);
810+
const expected = ['🌈', '🌟'];
811+
for await (const data of iterator) {
812+
t.deepEqual(data, expected.shift());
813+
if (expected.length === 0) {
814+
break;
815+
}
816+
}
817+
818+
t.deepEqual(await iterator.next(), {done: true});
819+
});
820+
821+
test.serial('emitSerial() - delivers events to anyEvent() iterator', async t => {
822+
const emitter = new Emittery();
823+
const iterator = emitter.anyEvent();
824+
825+
await emitter.emitSerial('πŸ¦„', '🌈');
826+
setTimeout(() => {
827+
emitter.emitSerial('πŸ¦„', Promise.resolve('🌟'));
828+
}, 10);
829+
830+
t.plan(3);
831+
const expected = [['πŸ¦„', '🌈'], ['πŸ¦„', '🌟']];
832+
for await (const data of iterator) {
833+
t.deepEqual(data, expected.shift());
834+
if (expected.length === 0) {
835+
break;
836+
}
837+
}
838+
839+
t.deepEqual(await iterator.next(), {done: true});
840+
});
841+
800842
test('emitSerial() - isDebug logs output', async t => {
801843
const eventStore = [];
802844

0 commit comments

Comments
Β (0)