-
当发送的网络请求因为各种原因失败后,希望自动重新发送请求,直到请求成功
-
通过 fetch 函数模拟一个 HTTP 请求,并在前4秒失败
let second = 0 function fetch() { return new Promise((resolve, reject) => { if (second < 5) { // 模拟请求发送失败 setTimeout(() => { reject('失败') second++ }, 1000) } else { // 第五秒请求成功 resolve('成功') } }) } // 请求失败后返回 Promise 对象 // 接收一个 onError 回调函数 function load(onError) { const p = fetch() return p.catch((err) => { // 当错误发生时,返回一个新的 Promise 实例,并调用 onError 回调 // 同时将 retry 函数作为 onError 回调的参数 return new Promise((resolve, reject) => { // retry 函数,用来执行重试的函数 // 执行该函数会重新调用 load 函数并发送请求 const retry = () => resolve(load(onError)) const fail = () => reject(err) onError(retry, fail) }) }) } // 模拟请求 load((retry, fail) => { // 请求失败后重新发送请求 console.log('重试') // fail().catch((err) => console.log(err)) retry() }).then((res) => { // 请求成功 console.log(res) })
07-16
08-01
10万+
08-04
8932
09-07
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交