问题描述
使用Promise封装异步请求数据时,当请求失败,可重试指定次数,最好封装一个retry(fun:Promise, times:Number)的重试工具函数
方法实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function retry(fn, times){ return new Promise((resolve, reject)=>{ function run(){ fn().then(resolve).catch(err=>{ if(times--){ console.log(`还有 ${times} 次尝试`) run() }else{ reject(err) } }) } run() }) }
|
测试样例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| function retryDemo(){ return new Promise((resolve, reject)=>{ let r = Math.random() setTimeout(()=>{ console.log(r) if(r>0.9){ resolve(r) }else{ reject('error:'+r) } }, 1000) }) }
retry(retryDemo, 5).then(res=>{ console.log('成功:'+ res) }).catch(err=>{ console.log(err) })
|
留言
欢迎交流想法。留言会通过 GitHub Issues 保存,首次使用需要登录 GitHub。