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