hexo/node_modules/cos-nodejs-sdk-v5/sdk/async.js

60 lines
1.2 KiB
JavaScript

var eachLimit = function (arr, limit, iterator, callback) {
callback = callback || function () {};
if (!arr.length || limit <= 0) {
return callback();
}
var completed = 0;
var started = 0;
var running = 0;
(function replenish() {
if (completed >= arr.length) {
return callback();
}
while (running < limit && started < arr.length) {
started += 1;
running += 1;
iterator(arr[started - 1], function (err) {
if (err) {
callback(err);
callback = function () {};
} else {
completed += 1;
running -= 1;
if (completed >= arr.length) {
callback();
} else {
replenish();
}
}
});
}
})();
};
var retry = function (times, iterator, callback) {
var next = function (index) {
iterator(function (err, data) {
if (err && index < times) {
next(index + 1);
} else {
callback(err, data);
}
});
};
if (times < 1) {
callback();
} else {
next(1);
}
};
var async = {
eachLimit: eachLimit,
retry: retry,
};
module.exports = async;