UNPKG

ut2

Version:

一个现代 JavaScript 实用工具库。[点击查看在线文档]。

46 lines (42 loc) 1.59 kB
'use strict'; var tslib = require('tslib'); var sleep = require('./sleep.js'); var tryit = require('./tryit.js'); function retry(fn, options) { return tslib.__awaiter(this, void 0, void 0, function () { var _a, _b, times, delay, backoff, exit, i, _c, err, result; return tslib.__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 = tslib.__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]; } }); }); } module.exports = retry;