12345678910111213141516171819202122 |
- 'use strict';
- module.exports = (iterable, reducer, initVal) => new Promise((resolve, reject) => {
- const iterator = iterable[Symbol.iterator]();
- let i = 0;
- const next = total => {
- const el = iterator.next();
- if (el.done) {
- resolve(total);
- return;
- }
- Promise.all([total, el.value])
- .then(value => {
- next(reducer(value[0], value[1], i++));
- })
- .catch(reject);
- };
- next(initVal);
- });
|