// 重试时间设置(毫秒) const config: any = { delay: { 1: 1000, 2: 3000, 3: 10000 } }; /** * 延迟 * @param {Number} ms 延迟时间(毫秒) */ const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); /** * 失败重试 * @author wendy * @param {Function} request 请求 * @param {Function} callback 失败重试回调 * @param {Number} times 重试次数 * @return {Promise} */ const retry: any = async (request: any, callback?: (delay: number) => any, times: number = 1) => { try { return await request(); } catch (err) { if (times <= 3) { callback && callback(config.delay[times] / 1000); await delay(config.delay[times]); await retry(request, callback, times + 1); return; } else { return Promise.reject(err); } } }; interface iOptions { list: Array, callback?: (delay: number) => any } export default (options: iOptions) => async (request: any, url: string) => { return options.list.includes(url) ? retry(request, options.callback) : request(); }