UNPKG

asyncc

Version:
62 lines (61 loc) 1.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = parallel; var _AsynccError = _interopRequireDefault(require("./AsynccError")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function parallel(limit, length, run) { var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var callback = arguments.length > 4 ? arguments[4] : undefined; if (typeof opts === 'function') { callback = opts; opts = {}; } limit = Math.abs(limit || length); var errpos = []; var errors = new Array(length).fill(); var results = new Array(length).fill(); var i = 0; var l = length; var done = 0; if (l === 0) { _final(); return; } if (opts.timeout) { setTimeout(function () { /* istanbul ignore else */ if (l) _final('err_timeout'); }, opts.timeout); } limit = limit < length ? limit : length; while (i < limit) { run(i++, cb); } function _final(errMsg) { if (done++) return; var err = null; if (errpos.length || errMsg) { err = new _AsynccError["default"](errMsg || 'err', errors, errpos); } callback && callback(err, results); } function cb(j, err, res) { results[j] = res; errors[j] = err; if (err) { errpos.push(j); if (opts.bail) { _final('err_bail'); return; } } l--; if (i < length) { run(i++, cb); } else if (!l) { _final(); } } }