You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					65 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					65 lines
				
				2.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", {
							 | 
						||
| 
								 | 
							
								    value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.default = function (opts, task) {
							 | 
						||
| 
								 | 
							
								    if (!task) {
							 | 
						||
| 
								 | 
							
								        task = opts;
							 | 
						||
| 
								 | 
							
								        opts = null;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    var _task = (0, _wrapAsync2.default)(task);
							 | 
						||
| 
								 | 
							
								    return (0, _initialParams2.default)(function (args, callback) {
							 | 
						||
| 
								 | 
							
								        function taskFn(cb) {
							 | 
						||
| 
								 | 
							
								            _task.apply(null, args.concat(cb));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (opts) (0, _retry2.default)(opts, taskFn, callback);else (0, _retry2.default)(taskFn, callback);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _retry = require('./retry');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _retry2 = _interopRequireDefault(_retry);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _initialParams = require('./internal/initialParams');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _initialParams2 = _interopRequireDefault(_initialParams);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _wrapAsync = require('./internal/wrapAsync');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _wrapAsync2 = _interopRequireDefault(_wrapAsync);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = exports['default'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * A close relative of [`retry`]{@link module:ControlFlow.retry}.  This method
							 | 
						||
| 
								 | 
							
								 * wraps a task and makes it retryable, rather than immediately calling it
							 | 
						||
| 
								 | 
							
								 * with retries.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @name retryable
							 | 
						||
| 
								 | 
							
								 * @static
							 | 
						||
| 
								 | 
							
								 * @memberOf module:ControlFlow
							 | 
						||
| 
								 | 
							
								 * @method
							 | 
						||
| 
								 | 
							
								 * @see [async.retry]{@link module:ControlFlow.retry}
							 | 
						||
| 
								 | 
							
								 * @category Control Flow
							 | 
						||
| 
								 | 
							
								 * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional
							 | 
						||
| 
								 | 
							
								 * options, exactly the same as from `retry`
							 | 
						||
| 
								 | 
							
								 * @param {AsyncFunction} task - the asynchronous function to wrap.
							 | 
						||
| 
								 | 
							
								 * This function will be passed any arguments passed to the returned wrapper.
							 | 
						||
| 
								 | 
							
								 * Invoked with (...args, callback).
							 | 
						||
| 
								 | 
							
								 * @returns {AsyncFunction} The wrapped function, which when invoked, will
							 | 
						||
| 
								 | 
							
								 * retry on an error, based on the parameters specified in `opts`.
							 | 
						||
| 
								 | 
							
								 * This function will accept the same parameters as `task`.
							 | 
						||
| 
								 | 
							
								 * @example
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * async.auto({
							 | 
						||
| 
								 | 
							
								 *     dep1: async.retryable(3, getFromFlakyService),
							 | 
						||
| 
								 | 
							
								 *     process: ["dep1", async.retryable(3, function (results, cb) {
							 | 
						||
| 
								 | 
							
								 *         maybeProcessData(results.dep1, cb);
							 | 
						||
| 
								 | 
							
								 *     })]
							 | 
						||
| 
								 | 
							
								 * }, callback);
							 | 
						||
| 
								 | 
							
								 */
							 |