diff options
author | Alexander Early <alexander.early@gmail.com> | 2015-07-02 00:26:16 -0700 |
---|---|---|
committer | Alexander Early <alexander.early@gmail.com> | 2015-07-02 00:26:16 -0700 |
commit | 9bdbb6452dbfcac9ff2d172489e5e0b639d8b9ff (patch) | |
tree | 1202f7795be2a2f3dba856ab24deb877fc99295a | |
parent | fd7a99c09ceca52e629f70d0ca4cd7a387fb07c1 (diff) | |
parent | b4059e8f0c624a87f8ab5613b3cbc4f7bdc41898 (diff) | |
download | async-9bdbb6452dbfcac9ff2d172489e5e0b639d8b9ff.tar.gz |
Merge pull request #823 from megawac/do-via-whilst
Implement doWhilst via whilst
-rw-r--r-- | lib/async.js | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/lib/async.js b/lib/async.js index 67eb379..0cde368 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) { |