接口请求失败处理,重新请求并限制请求次数.自己封装搞定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等...
不自见,故明;不自是,故彰;不自伐,故有功;不自矜;故长;夫唯不争,故天下莫能与之争。