waitUntil.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. var now = require('./now');
  2. exports = function(condition) {
  3. var timeout =
  4. arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  5. var interval =
  6. arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 250;
  7. function evalCondition() {
  8. return new Promise(function(resolve, reject) {
  9. try {
  10. resolve(condition());
  11. } catch (e) {
  12. reject(e);
  13. }
  14. });
  15. }
  16. return new Promise(function(resolve, reject) {
  17. var startTime = now();
  18. var pollCondition = function() {
  19. evalCondition().then(function(val) {
  20. var elapsed = now() - startTime;
  21. if (val) {
  22. resolve(val);
  23. } else if (timeout && elapsed >= timeout) {
  24. reject(
  25. Error('Wait timed out after '.concat(timeout, ' ms'))
  26. );
  27. } else {
  28. setTimeout(pollCondition, interval);
  29. }
  30. }, reject);
  31. };
  32. pollCondition();
  33. });
  34. };
  35. module.exports = exports;