如果失败X次,nodejs重试功能

2023-12-09

我希望我的函数执行 X(=3) 次直到成功。

在我的情况下我正在跑步kinesis.putRecord(来自 AWS API),如果失败 - 我想再次运行它,直到成功,但尝试次数不超过 3 次。

我是 NodeJS 新手,我写的代码很难闻。

const putRecordsPromise = function(params){
    return new Promise((resolve, reject) => {
        kinesis.putRecord(params, function (err, data) {
            resolve(err)
        });
    })
}

async function waterfall(params){
    try{
        let triesCounter = 0;
        while(triesCounter < 2){
            console.log(`try #${triesCounter}`)
            let recordsAnswer = await putRecordsPromise(params)
            if(!recordsAnswer){
                console.log("success")
                break;
            }
            triesCounter += 1;
        }
        // continue ...

    } catch(err){
        console.error(err)
    }
}

waterfall(params)

我保证错误的结果。之后,如果 err 为空,则一切顺利。否则,继续运行相同的命令。

我确信有一种更聪明的方法可以做到这一点。任何帮助,将不胜感激。


我认为,所有 Aws 函数都可以立即返回 Promise,然后您可以将调用放入try/catch:

let triesCounter = 0;
while(triesCounter < 2){
    console.log(`try #${triesCounter}`)
    try {
        await kinesis.putRecord(params).promise();
        break;  // 'return' would work here as well
    } catch (err) {
       console.log(err);
    }
    triesCounter ++;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果失败X次,nodejs重试功能 的相关文章

随机推荐

  • 升级后,@MapsId 在保存现有实体时抛出错误,但在其他方面工作正常

    我正在努力升级Spring Boot 1 5 21 项目 Java 8u221 to Spring Boot 2 1 9 Java 11 0 2 开放 在这两种情况下 我们都使用带有 spring boot 启动器和依赖解析器的 gradl
  • 如何在 AngularJS 中检测 HTML 渲染何时完成

    我对这个课题进行了广泛的研究 但无论我做什么 我发现实现这个目标都极其困难 我想在 AngularJS Web 应用程序中完全呈现所有元素时执行代码 我想我找到了建议使用路由器和视图的解决方案 但我无法在我的情况下使用它 因为它似乎需要某些
  • 使用 String hashCode() 方法? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 来自链接 http www tutorialspoint com java java string hashcode htm Java中hashCode和equals方法的关系 良好的
  • Python Pylab,如何更改指定轴大小的标签的大小

    我正在尝试绘制核衰变的微分横截面 因此 y 轴的大小约为10 38 m 2 pylab 默认将轴绘制为0 0 0 2 0 4 等并有一个 1e 38 在 y 轴的顶部 我需要增加一点字体大小 我尝试过调整标签大小 py tick param
  • 从 JFrame 修改独立的 JPanel

    我有一个带有两个独立 JPanel 的 JFrame 其中一个 JPanel 充满了 JButton 而另一个则有几个文本字段 我通过 JFrame 将鼠标侦听器添加到按钮 并且希望当从第一个 JPanel 触发事件时 第二个 JPanel
  • 将 XML Dsig 格式转换为 DER ASN.1 公钥

    我正在开发一个 iPhone 应用程序 它从 ASP NET Web 服务中检索 RSA 公钥 格式如下
  • 谷歌加API:“权限不足”错误

    我正在使用 api 搜索 google plus 这是我的网址 https www googleapis com plus v1 activities query internet 20marketing access token xxxx
  • __name__ 的目的是什么?

    什么是 name 做 我只见过它搭配 main 没有别的 我知道经典if name main 定义作为包运行与独立运行时的行为 但是还有什么其他用途 name name is main 如果您直接执行脚本 如果您要导入模块 name 是模块
  • 如何正确重载 __add__ 方法?

    我需要写一门涉及日期的课程 我应该超载 运算符允许将天数添加到日期中 解释一下它是如何工作的 ADate对象表示为 2016 4 15 格式为 年 月 日 添加整数 10 应该得到 2016 4 25 这Date阶级有价值观self yea
  • .NET 集合类的渐近复杂度

    是否有任何关于 NET 集合类方法的渐近复杂性 big O 和其他 的资源 Dictionary
  • 如何控制 JSF 中的访问和权限?

    我想在用户登录我的系统后控制访问 例如 administrator can add delete and give rights to employee employee fill forms only 因此 在知道用户拥有哪些权限后 检查
  • 如何使用log4j的同一个记录器将不同的信息写入两个不同的文件?

    我想使用我的记录器写入两个不同的文件 其声明如下 public static final Logger logger Logger getLogger Adapt class PropertyConfigurator configure l
  • 在 Ajax 调用中传递包含空格的值

    尝试在 ajax 调用中传递空格 我相信 word 与 word 的传递方式相同 另一方面 两个单词需要通过呼叫完全发送 第二个词 但不一样 第二个字 我应该在调用之前修剪还是在服务器端脚本上执行此操作 我怎样才能发送空格 我知道这是一个老
  • urllib2/requests 和 HTTP 相对路径

    如何强制 urllib2 requests 模块使用相对路径而不是完整 绝对 URL 当我使用 urllib2 requests 发送请求时 我在代理中看到它将其解析为 GET https xxxx path to something HT
  • 为什么我的应用程序没有输入 if 语句

    我正在尝试用 Java 编写一个控制台客户端 服务器应用程序 使用套接字 我目前有一个简单的登录系统和一个简单的命令系统 登录系统似乎可以正常工作 尽管它会向客户端打印 无效的用户名和密码 行 无论用户是否输入正确的凭据 连接肯定有效 然而
  • GAE 部署 Java8/Java7 错误

    我正在尝试通过 Intellij IDEA 将一个基本上空的项目部署到 GAE 我创建了一个新项目 在 appengine web xml 中设置我的项目 ID 并保留其他所有内容 我收到以下错误 并带有完整日志here java lang
  • 在满足条件后使用 mufa 停止 React 组件之间的通信

    我正在使用 sub pub 模式mufa在 React 组件之间而不是 props 之间进行通信 然后 我们将减轻父组件中的逻辑 正如您将在下面的代码片段中注意到的那样 const on fire mufa class Input exte
  • 使用 codeigniter 电子邮件库时,当主题 > 75 个字符时,电子邮件主题标头格式错误

    当主题超过 75 个字符时 我的 MIME 标头中出现一些乱码 当换行符编码在标头中时 会有一个无效的额外换行符 某些电子邮件网关会使用以下内容退回电子邮件 MIME 字段格式错误 utf 8 Q SUBJECT error 有人有过使用
  • Gradle - 没有主要清单属性

    我正在使用 Gradle 构建 JAR 文件 当我尝试运行它时 出现以下错误 RxJavaDemo jar 中没有主要清单属性 我尝试操纵manifest属性 但我想我忘记添加依赖项或其他内容 我究竟做错了什么 apply plugin j
  • 如果失败X次,nodejs重试功能

    我希望我的函数执行 X 3 次直到成功 在我的情况下我正在跑步kinesis putRecord 来自 AWS API 如果失败 我想再次运行它 直到成功 但尝试次数不超过 3 次 我是 NodeJS 新手 我写的代码很难闻 const p