| 'use strict'; |
|
|
| Object.defineProperty(exports, '__esModule', { |
| value: true, |
| }); |
| exports.promiseReduce = promiseReduce; |
|
|
| var _isPromise = require('./isPromise.js'); |
|
|
| /** |
| * 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. |
| */ |
| function promiseReduce(values, callbackFn, initialValue) { |
| let accumulator = initialValue; |
|
|
| for (const value of values) { |
| accumulator = (0, _isPromise.isPromise)(accumulator) |
| ? accumulator.then((resolved) => callbackFn(resolved, value)) |
| : callbackFn(accumulator, value); |
| } |
|
|
| return accumulator; |
| } |