• 主页
  • 随笔
所有文章 友链 关于我

  • 主页
  • 随笔

Promise重试功能实现

2020-08-15

问题描述

使用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
// 每隔一秒生成一个随机数,大于0.9才resolve
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)
})
/**
* 打印结果如下,5次都失败则打印error
0.13828016742576854
VM642:6 还有 4 次尝试
VM642:21 0.44909079753721226
VM642:6 还有 3 次尝试
VM642:21 0.03058115685015439
VM642:6 还有 2 次尝试
VM642:21 0.29728641790549015
VM642:6 还有 1 次尝试
VM642:21 0.9243906323866069
VM725:2 成功:0.9243906323866069
*/
赏

谢谢你请我吃糖果

扫一扫,分享到微信

微信分享二维码
模拟koa洋葱模型实现
Javascript类型与类型判断
© 2025 YiYing
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链
  • 关于我

tag:

  • 读书笔记
  • sql注入
  • sqlmap
  • nexus
  • HTTP安全
  • restfull
  • 随笔
  • 哲学
  • 缓存
  • HTTP状态码
  • HTTP连接
  • RSA
  • Java
  • JavaScript
  • 安全
  • 排序算法
  • POI
  • 工具类
  • 工作思考
  • Life
  • 读书
  • 前端
  • 团队管理

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 友情链接1
  • 友情链接2
  • 友情链接3
  • 友情链接4
  • 友情链接5
  • 友情链接6
很惭愧

只做了一点微小的工作
谢谢大家