| Leo Repp | 58b9f11 | 2021-11-22 11:57:47 +0100 | [diff] [blame^] | 1 | 'use strict'; |
| 2 | module.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 | }); | ||||