UNPKG

terriajs

Version:

Geospatial data visualization platform.

43 lines (36 loc) 1.38 kB
import when from 'terriajs-cesium/Source/ThirdParty/when'; import runLater from './runLater'; class Promise { constructor(callback) { this._deferred = when.defer(); this._resolved = false; callback(val => this._deferred.resolve(val), err => this._deferred.reject(err)); this._deferred.promise.then(()=> { this._resolved = true; }); } catch(onRejected) { return Promise.resolve(this._deferred.promise.otherwise(onRejected)); } then(onFulfilled, onRejected) { if (this._resolved) { // Cesium's whenjs immediately calls .then functions on resolved promises // The ECMA standard requires calling them later return Promise.resolve(runLater(() => this._deferred.promise.then(onFulfilled, onRejected))); } else { return Promise.resolve(this._deferred.promise.then(onFulfilled, onRejected)); } } } Promise.all = function(promises) { return Promise.resolve(when.all(promises)); }; Promise.race = function(promises) { return Promise.resolve(when.race(promises)); }; Promise.reject = function(err) { return new Promise((resolve, reject) => { reject(err); }); }; Promise.resolve = function(val) { return new Promise((resolve, reject) => { resolve(val); }); }; module.exports = Promise;