ut2
Version:
一个现代 JavaScript 实用工具库。[点击查看在线文档]。
44 lines (41 loc) • 1.58 kB
JavaScript
import { __awaiter, __generator, __read } from 'tslib';
import sleep from './sleep.js';
import tryit from './tryit.js';
function retry(fn, options) {
return __awaiter(this, void 0, void 0, function () {
var _a, _b, times, delay, backoff, exit, i, _c, err, result;
return __generator(this, function (_d) {
switch (_d.label) {
case 0:
_a = options || {}, _b = _a.times, times = _b === void 0 ? 3 : _b, delay = _a.delay, backoff = _a.backoff, exit = _a.exit;
i = 1;
_d.label = 1;
case 1:
if (!(i <= times)) return [3, 7];
return [4, tryit(fn)()];
case 2:
_c = __read.apply(void 0, [_d.sent(), 2]), err = _c[0], result = _c[1];
if (!err)
return [2, result];
if ((exit && exit(err, i)) || i === times)
throw err;
if (!delay) return [3, 4];
return [4, sleep(delay)];
case 3:
_d.sent();
_d.label = 4;
case 4:
if (!backoff) return [3, 6];
return [4, sleep(backoff(i))];
case 5:
_d.sent();
_d.label = 6;
case 6:
i++;
return [3, 1];
case 7: return [2];
}
});
});
}
export { retry as default };