接口请求失败处理,重新请求并限制请求次数.自己封装搞定retry函数

最近开发一款小程序的时候想到一个问题,如果接口突然挂掉怎么办呢,于是乎想到一个解决办法.接口请求重试功能.并限制请求次数
用最新的async函数语法实现.代码简洁明了.
测试代码如下:
function foo(param) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      try {
        JSON.parse('{{'); // 执行到这里会报错
        return resolve(param);
      } catch (err) {
        return reject(err);
      }
    }, 1000);
  });
}
  /**
  * 接口请求重试
  * @param {num} retryMax 请求次数
  */
async function autoRetry(retryMax) {
  try {
    if (retryMax <= 0) {
      return 'error';
    }
    let res = await foo(1)
    return res;
  } catch (error) {
    return autoRetry(retryMax - 1);
  }
}
autoRetry(3)
  .then(result => {
    console.log('result', result.data);
  })
  .catch(err => {
    console.log('err', err);
  });

 foo函数是用来模拟请求的,返回promise对象
正式用法如下:

const axios = require('axios');
/**
 * 接口请求重试
 * @param {num} retryMax  请求次数
 */
async function autoRetry(retryMax) {
  try {
    if (retryMax <= 0) {
      return 'error';
    }
    let res = await axios.get('http://dfsports_h5.dftoutiao.com/dfsports_h5/newspool?type=nba&typecode=900047&pgnum=1')
    return res;
  } catch (error) {
    return autoRetry(retryMax - 1);
  }
}

 await axios.get()这个方法还可以封装一下,用参数传递,可以应对不同的请求方法.
也可以引入node-retry ,
retry等...

posted @ 2019-04-10 21:05  成风6  阅读(4431)  评论(0编辑  收藏  举报