summaryrefslogtreecommitdiff
path: root/lib/async.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/async.js')
-rw-r--r--lib/async.js82
1 files changed, 36 insertions, 46 deletions
diff --git a/lib/async.js b/lib/async.js
index c105b69..312000f 100644
--- a/lib/async.js
+++ b/lib/async.js
@@ -778,31 +778,26 @@
async.whilst = function (test, iterator, callback) {
callback = callback || noop;
if (test()) {
- iterator(function (err) {
+ var next = _restParam(function(err, args) {
if (err) {
- return callback(err);
+ callback(err);
+ } else if (test.apply(this, args)) {
+ iterator(next);
+ } else {
+ callback(null);
}
- async.whilst(test, iterator, callback);
});
- }
- else {
+ iterator(next);
+ } else {
callback(null);
}
};
async.doWhilst = function (iterator, test, callback) {
- callback = callback || noop;
- iterator(_restParam(function (err, args) {
- if (err) {
- return callback(err);
- }
- if (test.apply(null, args)) {
- async.doWhilst(iterator, test, callback);
- }
- else {
- callback(null);
- }
- }));
+ var calls = 0;
+ return async.whilst(function() {
+ return ++calls <= 1 || test.apply(this, arguments);
+ }, iterator, callback);
};
async.until = function (test, iterator, callback) {
@@ -819,43 +814,38 @@
async.during = function (test, iterator, callback) {
callback = callback || noop;
- test(function(err, truth) {
+
+ var next = _restParam(function(err, args) {
if (err) {
- return callback(err);
- }
- if (truth) {
- iterator(function (err) {
- if (err) {
- return callback(err);
- }
- async.during(test, iterator, callback);
- });
+ callback(err);
+ } else {
+ args.push(check);
+ test.apply(this, args);
}
- else {
+ });
+
+ var check = function(err, truth) {
+ if (err) {
+ callback(err);
+ } else if (truth) {
+ iterator(next);
+ } else {
callback(null);
}
- });
+ };
+
+ test(check);
};
async.doDuring = function (iterator, test, callback) {
- callback = callback || noop;
- iterator(_restParam(function (err, args) {
- if (err) {
- return callback(err);
+ var calls = 0;
+ async.during(function(next) {
+ if (calls++ < 1) {
+ next(null, true);
+ } else {
+ test.apply(this, arguments);
}
- args.push(function (err, truth) {
- if (err) {
- return callback(err);
- }
- if (truth) {
- async.doDuring(iterator, test, callback);
- }
- else {
- callback(null);
- }
- });
- test.apply(null, args);
- }));
+ }, iterator, callback);
};
function _queue(worker, concurrency, payload) {