class ControllablePromise extends Promise { constructor() { let resolveClosure = null; let rejectClosure = null; super((resolve, reject) => { resolveClosure = resolve; rejectClosure = reject; }); this.resolveClosure = resolveClosure; this.rejectClosure = rejectClosure; } } const prom = new ControllablePromise(); async function func(){ try{ await prom; console.log('done'); } catch(err){ console.log(err.message); } } setTimeout(() => {prom.rejectClosure(); console.log('resolved');}, 1000); func();
Estoy intentando crear una promesa que puedo resolver/rechazar externamente. Puedo hacer esto funcionalmente sin problema, simplemente devolviendo una promesa regular después de adjuntarle los cierres de resolución/rechazo, pero cuando intento convertirlo en una clase, tengo dificultades. El código anterior arroja un error al intentar esperar la promesa. ¿Por qué sucede esto exactamente?