js实现一个可指定超时时间的异步函数重试机制

编程入门 行业动态 更新时间:2024-10-26 02:35:54

js实现一个可指定超时时间的异步函数<a href=https://www.elefans.com/category/jswz/34/1771334.html style=重试机制"/>

js实现一个可指定超时时间的异步函数重试机制

可以通过使用 PromisesetTimeout 来实现一个可指定超时时间的异步函数重试机制。具体实现如下:

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实现一个可指定超时时间的异步函数重试机制

本文发布于:2023-11-15 14:16:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1601073.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:重试   函数   机制   时间   js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!