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


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

    1. function retryPromise(promiseFactory, retryTimes, timeout) {
    2. return new Promise((resolve, reject) => {
    3. const tryUntilSucceedOrTimeout = () => {
    4. promiseFactory()
    5. .then((result) => {
    6. resolve(result);
    7. })
    8. .catch((error) => {
    9. if (retryTimes > 0) {
    10. setTimeout(() => {
    11. --retryTimes;
    12. tryUntilSucceedOrTimeout();
    13. }, timeout);
    14. } else {
    15. reject(error);
    16. }
    17. });
    18. };
    19. tryUntilSucceedOrTimeout();
    20. });
    21. }

    该函数接受三个参数:

    • promiseFactory 是一个无参数函数,返回一个 Promise 对象。
    • retryTimes 是重试的次数。
    • timeout 是超时时间,单位为毫秒。

    该函数返回一个 Promise 对象,当异步操作完成时,该 Promise 对象将被解析或拒绝。

    当异步操作发生错误时,该函数将重试异步操作,直到重试次数用尽或异步操作完成为止。每次重试将在超时时间之后进行。

    以下是一个使用示例:

    1. function asyncFunc() {
    2. return new Promise((resolve, reject) => {
    3. setTimeout(() => {
    4. const success = Math.random() < 0.8; // 模拟异步操作是否成功
    5. if (success) {
    6. resolve("Async operation completed.");
    7. } else {
    8. reject("Async operation failed.");
    9. }
    10. }, 1000);
    11. });
    12. }
    13. retryPromise(asyncFunc, 3, 500)
    14. .then((result) => {
    15. console.log(result); // 打印 "Async operation completed." 或重试 3 次后拒绝 Promise 对象
    16. })
    17. .catch((error) => {
    18. console.log(error); // 打印 "Async operation failed." 或重试 3 次后拒绝 Promise 对象
    19. });

    上面的示例中,asyncFunc 模拟一个异步操作,有 80% 的几率成功,20% 的几率失败。retryPromise 在异步操作失败时进行重试,最多重试 3 次,每次重试间隔为 500 毫秒。如果重试 3 次后还是失败,则拒绝返回的 Promise 对象。如果在重试过程中异步操作成功,则解析返回的 Promise 对象。

  • 相关阅读:
    Android 12(S) 图像显示系统 - BufferQueue的工作流程(九)
    k8s集群离线部署
    【校招VIP】专业课考点之死锁
    简述 HTML 的语义化标签是什么?
    Docker-compose
    反超 PowerDesigner,这个国产数据库建模工具很强
    基于SVD的图像压缩,PCA特征降维
    [leetcode]95.不同的二叉搜索树
    Visio免费版!Visio国产平替软件,终于被我找到啦!
    Milk-V Duo快速上手
  • 原文地址:https://blog.csdn.net/song19990524/article/details/134331211