diff --git a/src/helper/axios.js b/src/helper/axios.js index e3d2ece..b9a878a 100644 --- a/src/helper/axios.js +++ b/src/helper/axios.js @@ -88,25 +88,34 @@ async function send(xhr, retryConf) { waitToSend.push(retryConf); console.log(err); // 等待列表不为空时弹框要么出现了要么就是在消失的路上,没有办法给予用户点击重试的机会,所以交由外部逻辑处理 + + const failPostProceess = () => { + waitToSend.splice(waitToSend.indexOf(retryConf), 1); + return failData; + } // 注意,理论上带有时间戳的请求是不可以重试的,但是这里不做那方面考虑,如果未来有需要,可以自己实现一个刷新时间戳重试的逻辑 if (err.message === 'Network Error') - return (await failed('您的设备似乎断网了,或者服务器发生了问题,请检查网络后重试或刷新', flushWaitList)) || failData; + return (await failed('您的设备似乎断网了,或者服务器发生了问题,请检查网络后重试或刷新', flushWaitList(retryConf))) || failPostProceess(); if (!err?.response?.status) - return (await failed('请求发生问题:' + err.message, flushWaitList)) || failData; + return (await failed('请求发生问题:' + err.message, flushWaitList(retryConf))) || failPostProceess(); if (err.response.status === 504) - return (await failed('请求超时,请耐心等待几秒后重试或刷新', flushWaitList)) || failData; - return (await failed('服务器出现问题,请稍后重试或刷新,错误代码' + err.response.status, flushWaitList)) || failData; + return (await failed('请求超时,请耐心等待几秒后重试或刷新', flushWaitList(retryConf))) || failPostProceess(); + return (await failed('服务器出现问题,请稍后重试或刷新,错误代码' + err.response.status, flushWaitList(retryConf))) || failPostProceess(); } } -function flushWaitList() { - let fns = waitToSend.map( - conf => - async () => conf.resolver(await conf.fetcher()) - ); - waitToSend.splice(0, waitToSend.length); - fns.forEach(fn => fn()); +function flushWaitList(confToRun) { + return async () => { + waitToSend.splice(waitToSend.indexOf(confToRun), 1); + let fns = waitToSend.map( + conf => + async () => conf.resolver ? conf.resolver(await conf.fetcher()) : await conf.fetcher() + ); + waitToSend.splice(0, waitToSend.length); + fns.forEach(fn => fn()); + return confToRun.resolver ? confToRun.resolver(await confToRun.fetcher()) : await confToRun.fetcher() + }; } function feedWaitList(data) {