summaryrefslogtreecommitdiff
path: root/lib/whilst.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/whilst.js')
-rw-r--r--lib/whilst.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/whilst.js b/lib/whilst.js
index 9406cd4..00c510c 100644
--- a/lib/whilst.js
+++ b/lib/whilst.js
@@ -3,6 +3,39 @@
import noop from 'lodash/noop';
import rest from 'lodash/rest';
+/**
+ * Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when
+ * stopped, or an error occurs.
+ *
+ * @name whilst
+ * @static
+ * @memberOf async
+ * @category Control Flow
+ * @param {Function} test - synchronous truth test to perform before each
+ * execution of `fn`. Invoked with ().
+ * @param {Function} fn - A function which is called each time `test` passes.
+ * The function is passed a `callback(err)`, which must be called once it has
+ * completed with an optional `err` argument. Invoked with (callback).
+ * @param {Function} [callback] - A callback which is called after the test
+ * function has failed and repeated execution of `fn` has stopped. `callback`
+ * will be passed an error and any arguments passed to the final `fn`'s
+ * callback. Invoked with (err, [results]);
+ * @example
+ *
+ * var count = 0;
+ * async.whilst(
+ * function() { return count < 5; },
+ * function(callback) {
+ * count++;
+ * setTimeout(function() {
+ * callback(null, count);
+ * }, 1000);
+ * },
+ * function (err, n) {
+ * // 5 seconds have passed, n = 5
+ * }
+ * );
+ */
export default function whilst(test, iteratee, cb) {
cb = cb || noop;
if (!test()) return cb(null);