function asyncFunction() {
return new Promise((resolve, reject) => {
// 模拟一个异步操作,比如调用网络请求
setTimeout(() => {
const success = Math.random() < 0.5; // 模拟异步操作的成功或失败
if (success) {
resolve('Async operation completed successfully');
} else {
reject(new Error('Async operation failed'));
}
}, 1000);
});
}
function retryAsyncFunction(maxRetries, timeout) {
return new Promise((resolve, reject) => {
let retries = 0;
function attempt() {
asyncFunction()
.then((result) => {
resolve(result);
})
.catch((error) => {
retries++;
if (retries >= maxRetries) {
reject(error);
} else {
setTimeout(attempt, timeout);
}
});
}
attempt();
});
}
// 使用示例
retryAsyncFunction(3, 2000)
.then((result) => {
console.log(result);
})
.catch((error) => {
console.error(error);
});
在上述代码中,retryAsyncFunction
函数接受两个参数:maxRetries
指定最大重试次数,timeout
指定每次重试之间的间隔时间。在每次重试时,会调用asyncFunction
进行异步操作,如果成功则返回结果,如果失败则根据重试次数和最大重试次数判断是否继续重试。如果达到最大重试次数,则会将最终的失败原因进行拒绝,否则会等待一段时间(timeout),然后再次进行重试。