@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.34 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{abortMaybe as t}from"../../../../core/maybe.js";import{isAbortError as o}from"../../../../core/promiseUtils.js";class r{constructor(t){this.schedule=t,this._abortController=null,this._loadStatus=l.LOADING,this._loadError=null,this._loader=null,this.logger=null}destroy(){this.abortLoad()}get loadStatus(){return this._loadStatus}load(t,r){return this._loadStatus===l.LOADED?(t&&t(),this._loader??Promise.resolve()):this._loadStatus===l.FAILED?(r&&r(this._loadError),this._loader??Promise.resolve()):(null==this._loader&&(this._abortController=new AbortController,this._loader=this.doLoad(this._abortController.signal).then((()=>{this._abortController=null,this._loadStatus=l.LOADED}),(t=>{throw this._loadError=t,this._abortController=null,this._loadStatus=l.FAILED,!o(t)&&this.logger&&t.message&&this.logger.warn(t.message),t}))),this._loader.then(t,r).catch((()=>{})),this._loader)}abortLoad(){null!=this._abortController?this._abortController=t(this._abortController):this._loadStatus===l.LOADING&&(this._loadStatus=l.FAILED),this._loader=null}}var l;!function(t){t[t.LOADING=0]="LOADING",t[t.LOADED=1]="LOADED",t[t.FAILED=2]="FAILED"}(l||(l={}));export{l as LoadStatus,r as Loadable};