You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

22 lines
413 B

'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);
});