jQuery 请求失败自动重试逻辑?-灵析社区

乘03060920

碰到一个问题是这样的,有个老项目,用的jquery进行发送请求,因为环境网络不稳定之类的,会有偶然性的请求失败,SSL连接失败,没有状态码,只要重新发送就能正常了。所以期望能做到如果请求响应失败,且没有状态码时,请求能否每隔半秒自动重试3次。如下代码,在重试期间fail、error、always等回调逻辑不会被触发。 **不能更改用法,因为老项目中有大量这样的代码,十几种用法,2000多处使用,和项目内部的组件库强耦合,无法替换别的库,也没法一一替换业务代码** $.ajax({ url: 'http://localhost:3000/custom-response', success: () => console.log('cb,success'), fail: () => console.log('cb,fail'), error: () => console.log('cb,error') }).always( () => console.log('chain,always') ).done(() => { () => console.log('chain,done') }).error(() => { () => console.log('chain,done') }) 试过使用 `$.ajaxPrefilter` 和 `$.ajaxSetup` 对error、fail等进行重写,看似成功了一半,可是always没法被覆盖。 感觉重写钩子回调逻辑也没用,因为目的是更改请求完成的判断逻辑,不然被关联的组件库或基于ajax封装的工具方法等也会有适配不到位的场景,很难排查。多半只能改源码。 但是jquery源码逻辑太长没看太懂,不知道从何改起。不知道有没已有的方案

阅读量:17

点赞量:0

问AI
可以看看这个项目 "https://github.com/unjs/ofetch#%EF%B8%8F-auto-retry" (https://link.segmentfault.com/?enc=uv5FB5OFWR8U3ywNmuJdZw%3D%3D.swPQ2UkmgNR34YTEEKsHp6H5NS4LEuOX9Mw0uEWhCRA50dU1vVNAewoqJ2iX%2BLXJ4bY6Xfrxt3qfyzbv4Yozvw%3D%3D) 可以使用 fetch 在浏览器和 nodejs 中同时使用,如果不能更换请求库,可以看看应该在哪些条件才进行 retry。