for-emit-of
Turn Node.js Events into Async Iterables.
$ npm install for-emit-of
Example
import forEmitOf from 'for-emit-of';
import { Emitter } from '..';
const iterator = forEmitOf(Emitter, {
event: "data",
});
for await (const event of iterator){
}
Equivalent to
Emitter.on("data", () => {});
Transform
import forEmitOf from 'for-emit-of';
import { Emitter } from '..';
const iterator = forEmitOf(Emitter, {
transform: async (event) => {
return JSON.stringify(event);
}
});
for await (const event of iterator){
}
Equivalent to
Emitter.on("data", (event) => {
const stringy = JSON.stringify(event);
});
Change the event
import forEmitOf from 'for-emit-of';
import { Cart } from '..';
const iterator = forEmitOf(Cart, {
event: "checkout"
});
for await (const order of iterator){
}
Equivalent to
Cart.on("checkout", (order) => { ... });
Change the end
import forEmitOf from 'for-emit-of';
import { Cart } from '..';
const iterator = forEmitOf(Cart, {
end: ["end", "close"]
});
Timeout
firstEventTimeout
import forEmitOf from 'for-emit-of';
import { EventEmitter } from "events";
const emitter = new EventEmitter();
const iterator = forEmitOf(emitter, {
firstEventTimeout: 1000,
});
setTimeout(() => {
emitter.emit("data", {});
}, 2000);
for await (const msg of iterator) {
console.log(msg);
}
inBetweenTimeout
import forEmitOf from 'for-emit-of';
import { EventEmitter } from "events";
const emitter = new EventEmitter();
const iterator = forEmitOf(emitter, {
inBetweenTimeout: 1000,
});
setInterval(() => {
emitter.emit("data", {})
}, 2000)
for await (const msg of iterator) {
console.log(msg);
}
Limit
import forEmitOf from 'for-emit-of';
import { EventEmitter } from "events";
const emitter = new EventEmitter();
const iterator = forEmitOf(emitter, {
limit: 10
});
const interval = setInterval(() => {
emitter.emit("data", {});
}, 100);
let msgCount = 0;
for await (const msg of iterator) {
msgCount += 1
}
clearInterval(interval);
console.log(msgCount);
Debug
import forEmitOf from 'for-emit-of';
import { EventEmitter } from "events";
const emitter = new EventEmitter();
const iterator = forEmitOf(emitter, {
limit: 10,
debug: true
});
Keep Alive
import forEmitOf from 'for-emit-of';
import { EventEmitter } from "events";
const neverEmit = new EventEmitter();
const iterator = forEmitOf(neverEmit, {
keepAlive: 1000
});
for await (const data of iterator){
}