forever.js
1 'use strict'; 2 3 Object.defineProperty(exports, "__esModule", { 4 value: true 5 }); 6 7 var _onlyOnce = require('./internal/onlyOnce'); 8 9 var _onlyOnce2 = _interopRequireDefault(_onlyOnce); 10 11 var _ensureAsync = require('./ensureAsync'); 12 13 var _ensureAsync2 = _interopRequireDefault(_ensureAsync); 14 15 var _wrapAsync = require('./internal/wrapAsync'); 16 17 var _wrapAsync2 = _interopRequireDefault(_wrapAsync); 18 19 var _awaitify = require('./internal/awaitify'); 20 21 var _awaitify2 = _interopRequireDefault(_awaitify); 22 23 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 24 25 /** 26 * Calls the asynchronous function `fn` with a callback parameter that allows it 27 * to call itself again, in series, indefinitely. 28 29 * If an error is passed to the callback then `errback` is called with the 30 * error, and execution stops, otherwise it will never be called. 31 * 32 * @name forever 33 * @static 34 * @memberOf module:ControlFlow 35 * @method 36 * @category Control Flow 37 * @param {AsyncFunction} fn - an async function to call repeatedly. 38 * Invoked with (next). 39 * @param {Function} [errback] - when `fn` passes an error to it's callback, 40 * this function will be called, and execution stops. Invoked with (err). 41 * @returns {Promise} a promise that rejects if an error occurs and an errback 42 * is not passed 43 * @example 44 * 45 * async.forever( 46 * function(next) { 47 * // next is suitable for passing to things that need a callback(err [, whatever]); 48 * // it will result in this function being called again. 49 * }, 50 * function(err) { 51 * // if next is called with a value in its first parameter, it will appear 52 * // in here as 'err', and execution will stop. 53 * } 54 * ); 55 */ 56 function forever(fn, errback) { 57 var done = (0, _onlyOnce2.default)(errback); 58 var task = (0, _wrapAsync2.default)((0, _ensureAsync2.default)(fn)); 59 60 function next(err) { 61 if (err) return done(err); 62 if (err === false) return; 63 task(next); 64 } 65 return next(); 66 } 67 exports.default = (0, _awaitify2.default)(forever, 2); 68 module.exports = exports['default'];