| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- var _ = require("./_");
- var Promise = _.Promise;
- var genIterator = require("./genIterator");
- var tryErr = {};
- function tryCatch (step, key) {
- try {
- return step(key);
- } catch (err) {
- tryErr.err = err;
- return tryErr;
- }
- }
- module.exports = function (limit, list) {
- if (!_.isNumber(limit)) {
- list = limit;
- limit = Infinity;
- }
- return new Promise(function (resolve, reject) {
- var running = 0;
- var gen = genIterator(list);
- var done = false;
- function genNext () {
- running--;
- return step("next");
- }
- function genThrow (reason) {
- running--;
- return reject(reason);
- }
- function step (key) {
- if (done) {
- if (running === 0)
- resolve();
- return;
- }
- while (running < limit) {
- var info = gen[key]();
- if (info.done) {
- if (running === 0) resolve();
- return done = true;
- } else {
- running++;
- Promise.resolve(info.value).then(genNext, genThrow);
- }
- }
- }
- var ret = tryCatch(step, "next");
- if (ret === tryErr)
- reject(ret.err);
- });
- };
|