DSDSServer2024/build/build.20240805/static/js/Cesium-1.53/Specs/pollToPromise.js

48 lines
1.1 KiB
JavaScript

define([
'Core/defaultValue',
'Core/getTimestamp',
'ThirdParty/when'
], function(
defaultValue,
getTimestamp,
when) {
'use strict';
function pollToPromise(f, options) {
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
var pollInterval = defaultValue(options.pollInterval, 1);
var timeout = defaultValue(options.timeout, 5000);
var deferred = when.defer();
var startTimestamp = getTimestamp();
var endTimestamp = startTimestamp + timeout;
function poller() {
var result = false;
try {
result = f();
}
catch (e) {
deferred.reject(e);
return;
}
if (result) {
deferred.resolve();
} else if (getTimestamp() > endTimestamp) {
deferred.reject();
} else {
setTimeout(poller, pollInterval);
}
}
poller();
return deferred.promise;
}
return pollToPromise;
});