重试机制"/>
js实现一个可指定超时时间的异步函数重试机制
可以通过使用 Promise
和 setTimeout
来实现一个可指定超时时间的异步函数重试机制。具体实现如下:
function retryPromise(promiseFactory, retryTimes, timeout) {return new Promise((resolve, reject) => {const tryUntilSucceedOrTimeout = () => {promiseFactory().then((result) => {resolve(result);}).catch((error) => {if (retryTimes > 0) {setTimeout(() => {--retryTimes;tryUntilSucceedOrTimeout();}, timeout);} else {reject(error);}});};tryUntilSucceedOrTimeout();});
}
该函数接受三个参数:
promiseFactory
是一个无参数函数,返回一个Promise
对象。retryTimes
是重试的次数。timeout
是超时时间,单位为毫秒。
该函数返回一个 Promise
对象,当异步操作完成时,该 Promise
对象将被解析或拒绝。
当异步操作发生错误时,该函数将重试异步操作,直到重试次数用尽或异步操作完成为止。每次重试将在超时时间之后进行。
以下是一个使用示例:
function asyncFunc() {return new Promise((resolve, reject) => {setTimeout(() => {const success = Math.random() < 0.8; // 模拟异步操作是否成功if (success) {resolve("Async operation completed.");} else {reject("Async operation failed.");}}, 1000);});
}retryPromise(asyncFunc, 3, 500).then((result) => {console.log(result); // 打印 "Async operation completed." 或重试 3 次后拒绝 Promise 对象}).catch((error) => {console.log(error); // 打印 "Async operation failed." 或重试 3 次后拒绝 Promise 对象});
上面的示例中,asyncFunc
模拟一个异步操作,有 80% 的几率成功,20% 的几率失败。retryPromise
在异步操作失败时进行重试,最多重试 3 次,每次重试间隔为 500 毫秒。如果重试 3 次后还是失败,则拒绝返回的 Promise
对象。如果在重试过程中异步操作成功,则解析返回的 Promise
对象。
更多推荐
js实现一个可指定超时时间的异步函数重试机制
发布评论