@harlem/task
Version:
Harlem task package
2 lines (1 loc) • 808 B
JavaScript
;(()=>{var a=class extends Error{constructor(o){super("Task aborted");this.reason=o}};var r=class extends Promise{constructor(o,e=new AbortController){if(e.signal.aborted)throw new Error("Cannot attach task to an already aborted controller");let n=new Set,l=!1,i;super((f,c)=>{let h=t=>u(()=>f(t)),k=t=>u(()=>c(t)),T=t=>n.add(t),b=()=>e.signal.removeEventListener("abort",d),u=t=>{l?i=i||t:(b(),t())},d=()=>{l=!0,n.forEach(s=>{try{s(this.abortReason)}finally{n.delete(s)}}),l=!1;let t=i||(s=>c(new a(s)));b(),t(this.abortReason)};e.signal.addEventListener("abort",d),o(h,k,e,T)});this.controller=e}static isTask(o){return o instanceof r}get signal(){return this.controller.signal}get hasAborted(){return this.signal.aborted}abort(o){return this.abortReason=o,this.controller.abort(),this}};})();