Open goto-bus-stop opened 4 years ago
I am trying to code a fromEventEmitter function however it only iterates over one element even when two events are fired in succession.
export function fromEventEmitter<EventDef extends Array<unknown> = unknown[]>(
emitter: EventEmitter,
eventName: string,
config: { closeEventName: string } = { closeEventName: "close" }
) {
return (async function* (): AsyncIterable<EventDef> {
let isOpen = true;
emitter.once(config.closeEventName, () => (isOpen = false));
while (isOpen) {
console.log("cc", isOpen);
yield await new Promise((resolve) => {
const handler = (...args: any[]) => {
// pauseable.pause(emitter);
resolve((args as unknown) as EventDef);
setTimeout(() => {}, 0);
};
emitter.on(eventName, handler);
// pauseable.resume(emitter);
});
}
})();
peer.port.emit("incoming", {
id: "1",
path: ["viewport2", "viewport1"],
message: {
type: IMessageType.REQUEST,
payload: {},
},
} as IRoutePacket<unknown>);
peer.port.emit("incoming", {
id: "2",
path: ["viewport2", "viewport1"],
message: {
type: IMessageType.REQUEST,
payload: {},
},
} as IRoutePacket<unknown>);
I'm just trying to convert a EventEmitter into AsyncIterator
Hi! Is there an update that can be shared regarding this? I would also like to see this implemented. Even workarounds are appreciated. Thank you!
https://nodejs.org/api/events.html#events_events_on_emitter_eventname
Introduced in Node.js 13.6.0,
require('events').on
creates an Async Iterator over all the emits of an event.