You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
876 B
JavaScript
39 lines
876 B
JavaScript
import { defaultValue } from "../Source/Cesium.js";
|
|
import { getTimestamp } from "../Source/Cesium.js";
|
|
import { when } from "../Source/Cesium.js";
|
|
|
|
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;
|
|
}
|
|
export default pollToPromise;
|