Tips
Promise
Once fulfilled, it returns the value resolved for the first time.
For an example below, we call a resolver r twice; r(1) then r(2).
Eventually awaited Promise p in an event handler resolves to 1, and it always returns 1 whenever the execution reaches the p.
import { EventEmitter } from "node:events";
export function withResolvers<T>() {
let resolve: (value: T | PromiseLike<T>) => void;
let reject: (reason?: unknown) => void;
const promise = new Promise<T>((res, rej) => {
resolve = res;
reject = rej;
});
// @ts-ignore: ts(2454)
return { promise, resolve, reject };
}
const { promise: p, resolve: r } = withResolvers<number>();
const eventEmitter = new EventEmitter();
eventEmitter.on("event", async () => {
console.log("event");
const pv = await p;
console.log(pv);
});
eventEmitter.emit("event");
r(1);
eventEmitter.emit("event");
r(2);
eventEmitter.emit("event");
// event
// event
// event
// 1
// 1
// 1