本文介绍: 当执行fn函数时,它将同时返回一个Promise.race。这个Promise.race会等待fn函数返回结果或超时,然后抛出一个错误。如果fn在超时前返回结果,则返回该结果;否则,如果超时,则retry函数将再次重试fn函数。这将尝试重试doSomething函数5次,在每次重试之间等待2秒,并且每次异步操作的超时时间为8秒。如果doSomething函数在8秒内返回结果,结果将被打印到控制台上;可以使用async/await和Promise.race实现一个可指定超时时间的异步函数重试机制。
可以使用async/await和Promise.race实现一个可指定超时时间的异步函数重试机制。
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function retry(fn, maxRetries = 3, delayMs = 1000, timeoutMs = 5000) {
for (let i = 0; i < maxRetries; i++) {
try {
const result = await Promise.race([
fn(),
delay(timeoutMs).then(() => { throw new Error('Timeout'); })
]);
return result;
} catch (e) {
if (i === maxRetries - 1) {
throw e;
} else {
await delay(delayMs);
}
}
}
}
- fn:需要重试的异步函数。
- maxRetries(可选):最大重试次数,默认为3次。
- delayMs(可选):每次重试的延迟时间,默认为1000毫秒。
- timeoutMs(可选):每次异步操作的超时时间,默认为5000毫秒。
当执行fn函数时,它将同时返回一个Promise.race。这个Promise.race会等待fn函数返回结果或超时,然后抛出一个错误。如果fn在超时前返回结果,则返回该结果;否则,如果超时,则retry函数将再次重试fn函数。如果重试次数达到maxRetries,则最后一次错误将被抛出。
使用示例:
function doSomething() {
return new Promise(resolve => setTimeout(() => resolve('done'), 4000));
}
retry(doSomething, 5, 2000, 8000)
.then(result => console.log(result))
.catch(error => console.error(error));
这将尝试重试doSomething函数5次,在每次重试之间等待2秒,并且每次异步操作的超时时间为8秒。如果doSomething函数在8秒内返回结果,结果将被打印到控制台上;否则,将在5次重试后抛出一个错误。
原文地址:https://blog.csdn.net/m0_73358221/article/details/134765252
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_35910.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。