123456789101112131415161718192021222324252627282930313233343536 |
- var now = require('./now');
- exports = function(condition) {
- var timeout =
- arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
- var interval =
- arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 250;
- function evalCondition() {
- return new Promise(function(resolve, reject) {
- try {
- resolve(condition());
- } catch (e) {
- reject(e);
- }
- });
- }
- return new Promise(function(resolve, reject) {
- var startTime = now();
- var pollCondition = function() {
- evalCondition().then(function(val) {
- var elapsed = now() - startTime;
- if (val) {
- resolve(val);
- } else if (timeout && elapsed >= timeout) {
- reject(
- Error('Wait timed out after '.concat(timeout, ' ms'))
- );
- } else {
- setTimeout(pollCondition, interval);
- }
- }, reject);
- };
- pollCondition();
- });
- };
- module.exports = exports;
|