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)
})
js promise执行的时候,如果调用一个接口,这个接口可能受到网络等各方面的影响,造成接口出错,如果保证接口重试具体次数时,才去执行promise的resolve(),本文将呈现一个自动重试的方法
于 2021-11-11 16:16:53 首次发布
关键词由CSDN通过智能技术生成