UNPKG

parallel-universe

Version:

The set of async flow control structures and promise utils.

32 lines (28 loc) 954 B
'use strict'; var AbortablePromise = require('./AbortablePromise.js'); var utils = require('./utils.js'); function repeat(cb, ms, until) { return new AbortablePromise.AbortablePromise((resolve, reject, signal) => { let timer; signal.addEventListener('abort', () => { clearTimeout(timer); }); (function next(index) { new Promise(resolve => { resolve(utils.withSignal(cb(signal, index), signal)); }) .then(value => { if (signal.aborted) { return; } if (until !== undefined && until(value, index)) { resolve(value); return; } timer = setTimeout(next, typeof ms === 'function' ? ms(value, index) : ms, index + 1); }) .catch(reject); })(0); }); } exports.repeat = repeat;