延迟执行函数
/**
* 延迟执行函数
* @param {Number} delayms
* @returns
*/
export const sleep = (delayms) => {
return new Promise((resolve, reject) => {
setTimeout(resolve, delayms);
})
}
指数避退重试函数
/**
* 指数避退重试函数
* @param {Number} retryCount
* @param {Function} func
* @returns
*/
export async function RetryInvoke(retryCount, func) {
if (retryCount <= 0) retryCount = 1;
let nextDelay = 1000;
for (let i = 0; i != retryCount; ++i) {
try {
return await sleep(nextDelay).then(func);
} catch (error) {
console.log(error);
}
nextDelay = nextDelay * 2;
}
// 最后再执行一次
return await sleep(nextDelay).then(func);
}