зеркало из https://github.com/mozilla/gecko-dev.git
34 строки
880 B
JavaScript
34 строки
880 B
JavaScript
Cu.import("resource://gre/modules/Promise.jsm");
|
|
|
|
const SINGLE_TRY_TIMEOUT = 100;
|
|
const NUMBER_OF_TRIES = 30;
|
|
|
|
function waitForConditionPromise(condition, timeoutMsg, tryCount=NUMBER_OF_TRIES) {
|
|
let defer = Promise.defer();
|
|
let tries = 0;
|
|
function checkCondition() {
|
|
if (tries >= tryCount) {
|
|
defer.reject(timeoutMsg);
|
|
}
|
|
var conditionPassed;
|
|
try {
|
|
conditionPassed = condition();
|
|
} catch (e) {
|
|
return defer.reject(e);
|
|
}
|
|
if (conditionPassed) {
|
|
return defer.resolve();
|
|
}
|
|
tries++;
|
|
setTimeout(checkCondition, SINGLE_TRY_TIMEOUT);
|
|
}
|
|
setTimeout(checkCondition, SINGLE_TRY_TIMEOUT);
|
|
return defer.promise;
|
|
}
|
|
|
|
function waitForCondition(condition, nextTest, errorMsg) {
|
|
waitForConditionPromise(condition, errorMsg).then(nextTest, (reason) => {
|
|
ok(false, reason + (reason.stack ? "\n" + e.stack : ""));
|
|
});
|
|
}
|