UNPKG

bbo

Version:

bbo is a utility library of zero dependencies for javascript.

50 lines (41 loc) 1.1 kB
'use strict'; /* eslint-disable prefer-promise-reject-errors */ /** * @param {any} attempt * @param {any} options * interval: 200, //ms * retries: 2 * timeout: 8000 //ms */ function retry (attempt, options) { var option = options || {}; var interval = option.interval || 400; var retries = option.retries || 2; var timeout = option.timeout || 8000; function rejectDelay(reason) { return new Promise(function (resolve, reject) { setTimeout(reject.bind(null, reason), interval); }); } var p = Promise.reject(); for (var i = 0; i < retries; i++) { p = p.catch(timeoutReject(attempt, timeout)).catch(rejectDelay); } return p; } function timeoutReject(task, timeout) { var timer; return function () { return Promise.race([Promise.reject().catch(task), new Promise(function (rs, rj) { timer = setTimeout(function () { rj('timeout.'); }, timeout || 8000); })]).then(function (r) { clearTimeout(timer); return r; }, function (err) { return Promise.reject(err); }); }; } module.exports = retry;