UNPKG

fishbird

Version:

Fishbird is a simple, lightweight, and fast Promise utility library

47 lines 1.29 kB
'use strict'; function map(arr, fn, { concurrency = Infinity } = { concurrency: Infinity }) { if (typeof concurrency !== "number") { throw new TypeError(`${String(concurrency)} is not a number`); } if (!Array.isArray(arr)) { throw new TypeError(`arr must be collection, but got ${typeof arr}`); } const fn2 = fn || ((item) => item); return new Promise((resolve, reject) => { let completed = 0; let started = 0; let running = 0; const results = new Array(arr.length).fill(void 0); let rejected = false; function start(index) { const cur = arr[index]; Promise.resolve(fn2.call(cur, cur, index, arr)).then((result) => { running--; completed++; results[index] = result; replenish(); }).catch((err) => { rejected = true; reject(err); }); } function replenish() { if (rejected) return; if (completed >= arr.length) { resolve(results); return; } while (running < concurrency && started < arr.length) { start(started); running++; started++; } } replenish(); }); } var map_default = map; exports.map = map; exports.map_default = map_default; //# sourceMappingURL=chunk-RCO7SQLF.js.map