UNPKG

redo-promise

Version:

Retry a promise, when async function call.

55 lines (46 loc) 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** * 重试 Promise * @param requestPromise * @param predicate * @param opts * @returns {function(...[*]=): Promise<any>} */ var retry = function retry(requestPromise) { var predicate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () { return false; }; var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var _opts$delay = opts.delay, delay = _opts$delay === undefined ? 1000 : _opts$delay, _opts$max = opts.max, max = _opts$max === undefined ? 5 : _opts$max, _opts$cnt = opts.cnt, cnt = _opts$cnt === undefined ? 0 : _opts$cnt; return function () { for (var _len = arguments.length, params = Array(_len), _key = 0; _key < _len; _key++) { params[_key] = arguments[_key]; } return new Promise(function (resolve, reject) { requestPromise.apply(undefined, params).then(function (result) { // 判断重试条件 if (cnt < max && predicate(result)) { // 重试 var f = retry(requestPromise, predicate, _extends({}, opts, { cnt: cnt + 1 })); return setTimeout(function () { f.apply(undefined, params).then(resolve).catch(reject); }, delay); } // 不用重试了 resolve(result); }).catch(reject); }); }; }; exports.default = retry;