1234567891011121314151617181920 |
- import { isPromise } from './isPromise.mjs';
- /**
- * Similar to Array.prototype.reduce(), however the reducing callback may return
- * a Promise, in which case reduction will continue after each promise resolves.
- *
- * If the callback does not return a Promise, then this function will also not
- * return a Promise.
- */
- export function promiseReduce(values, callbackFn, initialValue) {
- let accumulator = initialValue;
- for (const value of values) {
- accumulator = isPromise(accumulator)
- ? accumulator.then((resolved) => callbackFn(resolved, value))
- : callbackFn(accumulator, value);
- }
- return accumulator;
- }
|