UNPKG

parallel-universe

Version:

The set of async flow control structures and promise utils.

30 lines (27 loc) 919 B
import { AbortablePromise } from './AbortablePromise.mjs'; import { withSignal } from './utils.mjs'; function repeat(cb, ms, until) { return new AbortablePromise((resolve, reject, signal) => { let timer; signal.addEventListener('abort', () => { clearTimeout(timer); }); (function next(index) { new Promise(resolve => { resolve(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); }); } export { repeat };