最近開發一款小程序的時候想到一個問題,如果接口突然掛掉怎么辦呢,於是乎想到一個解決辦法.接口
請求重試功能.並限制請求次數
用最新的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等...
