下面是一个示例代码,实现了一个可指定超时时间的异步函数重试机制:
function retryWithTimeout(fn, retries, timeout) {
return new Promise((resolve, reject) => {
const retry = async (attempt) => {
try {
const result = await fn();
resolve(result);
} catch (error) {
if (attempt < retries) {
setTimeout(() => {
retry(attempt + 1);
}, timeout);
} else {
reject("Exceeded maximum retries");
}
}
};
retry(0);
});
}
// 使用示例
const asyncFunction = async () => {
// 模拟一个可能会失败的异步操作
if (Math.random() < 0.8) {
return "Success!";
} else {
throw new Error("Failed");
}
};
retryWithTimeout(asyncFunction, 3, 1000)
.then(result => console.log(result))
.catch(error => console.error(error));
在这个示例中,retryWithTimeout
函数接受三个参数:待重试的异步函数 fn
、重试次数 retries
和超时时间 timeout
。它会在每次调用 fn
失败时进行重试,最多重试 retries
次,并在每次重试之间等待 timeout
毫秒。