UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 1.71 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{isAborted as s,createAbortError as t,isPromiseLike as n}from"../../core/promiseUtils.js";import{signal as e}from"../../core/signal.js";import{Yield as i}from"../../views/support/Yield.js";class r{constructor(){this._tasks=new Array,this._numPendingTasks=e(0),this._running=e(!1)}get length(){return this._tasks.length}get updating(){return this._numPendingTasks.value>0}get running(){return this._running.value}_updateRunning(){this._running.value=this._tasks.length>0}destroy(){this.cancelAll()}runTask(s){if(0===this.length)return i;for(;!s.done&&this._process(s);)s.madeProgress()}push(s,t,n){return new Promise(((e,i)=>{this._tasks.push(new a(e,i,s,t,n)),++this._numPendingTasks.value,this._updateRunning()})).finally((()=>--this._numPendingTasks.value))}unshift(s,t,n){return new Promise(((e,i)=>{this._tasks.unshift(new a(e,i,s,t,n)),++this._numPendingTasks.value,this._updateRunning()})).finally((()=>--this._numPendingTasks.value))}_process(e){if(0===this._tasks.length)return!1;const i=this._tasks.shift();this._updateRunning();try{const r=s(i.signal);if(r&&!i.abortCallback)i.reject(t());else{const s=r?i.abortCallback?.(t()):i.callback(e);n(s)?s.then(i.resolve,i.reject):i.resolve(s)}}catch(r){i.reject(r)}return!0}cancelAll(){const s=t();for(const t of this._tasks)if(t.abortCallback){const n=t.abortCallback(s);t.resolve(n)}else t.reject(s);this._tasks.length=0,this._updateRunning()}}class a{constructor(s,t,n,e=void 0,i=void 0){this.resolve=s,this.reject=t,this.callback=n,this.signal=e,this.abortCallback=i}}export{r as PromiseQueue};