iter-tools-es
Version:
The iterable toolbox
42 lines (35 loc) • 927 B
JavaScript
const {
asyncIterableCurry
} = require('../../internal/async-iterable.js');
const {
__asyncPeekerate
} = require('../$peekerate/async-peekerate.js');
async function __asyncReduce(iterable, reducer, initial = undefined) {
let c = 0;
let result = initial;
const peekr = await __asyncPeekerate(iterable);
try {
if (initial === undefined) {
if (peekr.done) {
throw new Error('Cannot reduce: no initial value specified and iterable was empty');
}
result = peekr.value;
await peekr.advance();
c = 1;
}
while (!peekr.done) {
result = await reducer(result, peekr.value, c++);
await peekr.advance();
}
return result;
} finally {
peekr.return();
}
}
exports.__asyncReduce = __asyncReduce;
const asyncReduce = /*#__PURE__*/asyncIterableCurry(__asyncReduce, {
reduces: true,
minArgs: 1,
maxArgs: 2
});
exports.asyncReduce = asyncReduce;