blob: e121b32a97c6ae6614b911a30b06bf02dd618782 [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001'use strict';
2module.exports = (iterable, reducer, initVal) => new Promise((resolve, reject) => {
3 const iterator = iterable[Symbol.iterator]();
4 let i = 0;
5
6 const next = total => {
7 const el = iterator.next();
8
9 if (el.done) {
10 resolve(total);
11 return;
12 }
13
14 Promise.all([total, el.value])
15 .then(value => {
16 next(reducer(value[0], value[1], i++));
17 })
18 .catch(reject);
19 };
20
21 next(initVal);
22});