diff options
| author | Alexander Early <alexander.early@gmail.com> | 2018-09-02 20:16:08 -0700 |
|---|---|---|
| committer | Alexander Early <alexander.early@gmail.com> | 2018-09-02 20:16:08 -0700 |
| commit | 3a30a9f046859195205f05d36cce5011c14cba98 (patch) | |
| tree | ffb2ca88617dc923c81bc203e271ee6cbb3a1c9e | |
| parent | 01292f5e5f1170fe8948f88b60e488c2274e021c (diff) | |
| download | async-3a30a9f046859195205f05d36cce5011c14cba98.tar.gz | |
awaitable forever
| -rw-r--r-- | lib/forever.js | 11 | ||||
| -rw-r--r-- | test/es2017/awaitableFunctions.js | 19 |
2 files changed, 26 insertions, 4 deletions
diff --git a/lib/forever.js b/lib/forever.js index fb69adf..4914c21 100644 --- a/lib/forever.js +++ b/lib/forever.js @@ -1,7 +1,7 @@ -import noop from './internal/noop'; import onlyOnce from './internal/onlyOnce'; import ensureAsync from './ensureAsync'; import wrapAsync from './internal/wrapAsync'; +import awaitify from './internal/awaitify' /** * Calls the asynchronous function `fn` with a callback parameter that allows it @@ -19,6 +19,8 @@ import wrapAsync from './internal/wrapAsync'; * Invoked with (next). * @param {Function} [errback] - when `fn` passes an error to it's callback, * this function will be called, and execution stops. Invoked with (err). + * @returns {Promise} a promise that rejects if an error occurs and an errback + * is not passed * @example * * async.forever( @@ -32,8 +34,8 @@ import wrapAsync from './internal/wrapAsync'; * } * ); */ -export default function forever(fn, errback) { - var done = onlyOnce(errback || noop); +function forever(fn, errback) { + var done = onlyOnce(errback); var task = wrapAsync(ensureAsync(fn)); function next(err) { @@ -41,5 +43,6 @@ export default function forever(fn, errback) { if (err === false) return; task(next); } - next(); + return next(); } +export default awaitify(forever, 2) diff --git a/test/es2017/awaitableFunctions.js b/test/es2017/awaitableFunctions.js index 25bdbc8..45b7039 100644 --- a/test/es2017/awaitableFunctions.js +++ b/test/es2017/awaitableFunctions.js @@ -443,4 +443,23 @@ module.exports = function () { 'test', 5 ]) }); + + + it('should return a Promise: forever', async () => { + expect (async.forever.name).to.contain('forever') + const calls = [] + let counter = 0 + try { + await async.forever(async () => { + calls.push(counter) + counter++ + await Promise.resolve() + if (counter === 5) throw new Error() + }) + } catch (e) { + var err = e + } + expect(calls).to.eql([0, 1, 2, 3, 4]) + expect(err).to.be.an('error') + }); }; |
