summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Early <alexander.early@gmail.com>2018-09-02 20:16:08 -0700
committerAlexander Early <alexander.early@gmail.com>2018-09-02 20:16:08 -0700
commit3a30a9f046859195205f05d36cce5011c14cba98 (patch)
treeffb2ca88617dc923c81bc203e271ee6cbb3a1c9e
parent01292f5e5f1170fe8948f88b60e488c2274e021c (diff)
downloadasync-3a30a9f046859195205f05d36cce5011c14cba98.tar.gz
awaitable forever
-rw-r--r--lib/forever.js11
-rw-r--r--test/es2017/awaitableFunctions.js19
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')
+ });
};