UNPKG

dashp

Version:

Utilities for monadic promises.

72 lines (64 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.collect8 = exports.collect7 = exports.collect6 = exports.collect5 = exports.collect4 = exports.collect3 = exports.collect2 = exports.collect = void 0; var _curry = require("./internal/curry"); const collectN = atOnce => (f, xs) => // eslint-disable-next-line promise/avoid-new new Promise((resolve, reject) => { const ret = []; const iterator = xs[Symbol.iterator](); let isRejected = false; let iterableDone = false; let resolvingCount = 0; let currentIdx = 0; const next = () => { if (isRejected) return; const nextItem = iterator.next(); const i = currentIdx; currentIdx += 1; if (nextItem.done) { iterableDone = true; if (resolvingCount === 0) resolve(ret); return; } resolvingCount += 1; Promise.resolve(nextItem.value).then(f) // eslint-disable-next-line promise/always-return .then(val => { ret[i] = val; resolvingCount -= 1; next(); // eslint-disable-line promise/no-callback-in-promise }).catch(err => { isRejected = true; reject(err); }); }; for (let i = 0; i < atOnce; i += 1) { next(); if (iterableDone) break; } }); const { collect, collect2, collect3, collect4, collect5, collect6, collect7, collect8 } = [...Array(8).keys()].reduce((memo, i) => { const name = `collect${i === 0 ? "" : i + 1}`; return Object.assign(memo, { [name]: (0, _curry.curry2)(name, collectN(i + 1)) }); }, {}); exports.collect8 = collect8; exports.collect7 = collect7; exports.collect6 = collect6; exports.collect5 = collect5; exports.collect4 = collect4; exports.collect3 = collect3; exports.collect2 = collect2; exports.collect = collect; //# sourceMappingURL=collect.js.map