js promise执行的时候,如果调用一个接口,这个接口可能受到网络等各方面的影响,造成接口出错,如果保证接口重试具体次数时,才去执行promise的resolve(),本文将呈现一个自动重试的方法

8 篇文章 0 订阅
function autoRetry(func, retryMax) {
    retryNum = 0;
    let funcName = 'foo'
    return funcR = function () {
      let params = arguments;
      return new Promise((resolve, reject) => {
        func(...params).then(result => {
          resolve(result);
        }).catch(err => {
          if (retryNum < retryMax) {
            retryNum ++;
            console.warn(`[autoRetry] Catched error when ${funcName}() : ${err.message}. Retry ${retryNum} time...`);
            resolve(funcR(...params));
          } else {
            reject(err);
          }
        });
      });
    };
  }


// 这是一个标准的Promise化的方法
function foo (param,name) {
    console.log('fooparam',param)
    console.log('fooparamname',name)
    return new Promise((resolve, reject) => {
   
        try{
          JSON.parse('['); // 执行到这里会报错
          return resolve(param);
        } catch (err) {
          return reject(err);
        }
    })
  }
  
  // 使用autoRetry()包裹方法,并给出最大重试次数(执行数=重试次数+1)
  foo = autoRetry(foo, 3);
  
  // 执行并获取结果/捕获错误
  foo(123,'xiaoxiao')
    .then(r => {
      console.log('成功返回:');
      console.log(r)
    })
    .catch(e => {
      console.log('最后错误:');
      console.log(e)
    })

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值