Node.js方法错误自动重试的实现

WPS JS宏结合Node.js实现自动化数据抓取与Excel导出 本文详细介绍了如何利用WPS JS宏结合Node.js实现自动化数据抓取与Excel导出。通过WPS JS宏处理Excel文件操作,Node.js负责网络请求和数据抓取,两者结合可高效完成数据收集任务。文章还分享了绕过网站登录验证的技巧,包括处理Cookie和请求头信息,帮助用户快速实现自动化办公。 阅读详情

在使用Node.js实现爬虫、检测等功能时,经常会遇到大量网络请求的情况,这时很容易因为超时而使得请求失败。为令结果正确,我们一般会设置一定的失败重试次数,以避免因网络波动引起的失败。若多次尝试最终失败,才抛出错误。

下面上一段代码:

/**
 * 包裹方法,使其自动错误重试
 * 只能包裹返回Promise的方法
 * 返回promise,可以获取成功的返回值,或最后失败的err
 * 需要运行环境支持ES6的Promise语法,或者使用Bluebird库
 * @param func
 * @param retryMax
 * @returns {funcR}
 */
function autoRetry(func, retryMax) {
  retryNum = 0;
  let funcName = func.toString().match(/function (\w+)\(/)[1];
  return funcR = function () {
    let params = arguments;
    return new Promise((resolve, reject) => {
      func(...params).then(result => {
        resolve(result);
      }).catch(err => {
        if (retryNum < retryMax) {
          retryNum ++;
          console.warn(`[autoRetry] Catched error when ${funcName}() : ${err.message}. Retry ${retryNum} time...`);
          resolve(funcR(...params));
        } else {
          reject(err);
        }
      });
    });
  };
}

使用起来很简单。下面举一个例子:

// 这是一个标准的Promise化的方法
function foo (param) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      try{
        JSON.parse('{{'); // 执行到这里会报错
        return resolve(param);
      } catch (err) {
        return reject(err);
      }
    }, 1000);
  })
}

// 使用autoRetry()包裹方法,并给出最大重试次数(执行数=重试次数+1)
foo = autoRetry(foo, 3);

// 执行并获取结果/捕获错误
foo(123)
  .then(r => {
    console.log('成功返回:');
    console.log(r)
  })
  .catch(e => {
    console.log('最后错误:');
    console.log(e)
  })

// 也可以这样写
(async function (){
    try {
        let result = await foo(123);
    } catch (e) {
        console.log(e);
    }
})();
入门Node.js错误处理 前言 一个健壮性的 Node.js 项目,需要处理好程序错误,本文将带你入门 Node.js 的错误处理。 Error 基础 Node.js 中的错误是 Error 类的任何实例,包括一些内置错误类,还可以扩展基本 Error 类,内置错误类或其他自定义错误来创建用户定义的错误。 JavaScript Error 标准类 new Error([message[, fileName[, lineNumber]]]) message: 描述错误的信息 fileName: Error 代码所在的文件名 lin 阅读详情

相关推荐

Node.js爬虫实战:电商库存监控与自动下单全解析

爬虫技术不仅用于数据采集,还广泛应用于业务自动化场景。在电商领域,通过Node.js编写脚本模拟用户操作,可实现对商品库存的实时监控与自动下单。本文从HTTP请求封装、Cookie鉴权、轮询机制等基础原理讲起,深入探讨如何设计一个可靠的状态机来识别库存变化,并有效应对接口超时、参数校验等工程挑战。同时,文章总结了应对反爬虫风控的实际经验,包括随机抖动、请求频率控制以及防止重复下单的锁机制。以开源项目jd-happy为例,完整展示了从监控到结算的自动化链路,为电商自动化工具的开发者提供了一份可落地的实战参考。

weixin_30431445的博客 259

node.js重试机制的简单实现

       异常在程序设计的过程中无处不在,也会使我们的程序变得复杂臃肿。简单的do{...}while(1)基本能够实现我们所需要的异常处理,但这个显然不是优雅的node写法。今天自己动手实现一个简单的retry类来实现重试功能。代码中的异步处理采用co库进行了封装。retry.js'use strict'; const maxRetryTimes = 10; class retry{ ...

weixin_39169700的博客 2486

Node.js网络错误处理与重试策略

本文深入探讨了Node.js环境下网络错误的类型及处理机制。内容包括协议错误、Node.js网络错误列表、错误重试逻辑,并提出了使用幂等性键、断路器模式和指数退避等高级错误处理策略。通过具体案例和图表,文章详细说明了如何在实际开发中应对网络错误,提高应用的稳定性和弹性。

weixin_42234168的博客 523

node mysql retry,Nodejs http在超时或错误时重试

I'm trying to automatically retry HTTP requests on timeout or error.Currently my code looks like this:var req = http.get(url, doStuff).on('error', retry).setTimeout(10000, retry);However, a single req...

weixin_33870147的博客 428

node-request-retry:包装NodeJS请求模块以在出现错误时重试HTTP请求

request-retry -HTTP(s)请求对可恢复的错误进行重试。 如果连接失败并出现ECONNRESET , ENOTFOUND , ESOCKETTIMEDOUT , ETIMEDOUT , ECONNREFUSED , EHOSTUNREACH , EPIPE , EAI_AGAIN或者发生HTTP 5xx或429错误,该请求将自动重新尝试,因为这些错误通常是可恢复的错误,并且将消失重试。 :red_heart: 无耻的插头 您可以实际使用的条纹付款电子邮件 安装 使用npm安装。 npm install --save requestretry 用法 请求重试是一个下拉更换为要求,但增加了两个新的选项maxAttempts和retryDelay 。 它还会向响应(或发生网络错误时的错误对象)添加一个属性attempts 。 它支持回调或承诺。 带回调 var request = r

node-promise-retry:利用重试模块的功能重试返回承诺的函数

节点承诺重试 重试返回承诺的函数,利用模块的功能来实现承诺世界。 已经有一些模块可以重试返回promise的函数,但是它们很难使用,或者没有提供进行条件重试的简便方法。 安装 $ npm install promise-retry 用法 promiseRetry(fn,[选项]) 调用fn直到返回的承诺最终实现或拒绝,并返回与retry错误不同的错误。 options参数是一个映射到模块选项的对象: retries :重试该操作的最长时间。 默认值为10 。 factor :要使用的指数因子。 默认值为2 。 minTimeout :开始第一次重试之前的毫秒数。 默认值为1000 。 maxTimeout :两次重试之间的最大毫秒数。 默认值为Infinity 。 randomize :通过乘以1到2之间的因子来randomize化超时。 默认值为false 。 fn函

接口请求重试八种方法

接口请求重试

usa_washington的博客 1464

Nodejs回调加超时限制两种实现方法

主要介绍了Nodejs回调加超时限制两种实现方法的相关资料,需要的朋友可以参考下

实现一个支持请求失败后重试的JS方法

假设存在一个函数,返回promise对象。它可能会失败。 // 伪代码 function asyncFunc(){ return new Promise((resolve,reject)=>{ axios.get('http://sdadasdadadasdas.com').then((res)=>{ resolve(res) }).catch((err)=>{ reject(err)

wangliuqi123的博客 2258

可视化工具--Plotly

随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对于Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。   为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。

YFater的博客 1万+

Zuken E3.series schematic/cable/Formboard 连载(1)

​ 1987-2001年,CIM-Team公司(德国)推出基于MS-DOS环境下运行的CAD软件DDS-schematic 2002年,在此基础上,推出基于windows环境下运行,应用于电气工程领域的E3.Series 2002-2006年,CIM-Team公司成为Zuken公司(日本)的一家分公司,实现电子电气系统的完整设计平台 覆盖电子、电气原理设计,三维机柜设备布局与配线设计,线缆线束设计及其各类生产报表文档生成的完整设计流程

u010930036的博客 2507

nodejs异步请求重试策略总结

对于node开发同学经常要处理异步请求,然后根据请求的结果或请求成功后的状态码做不同的策略处理,众多策略中最常用的一种就是重试策略。针对重试策略我们往往还需要设定一定的规则,如重试次数、重试时间间隔、总体超时时间、重试判定等。针对以上问题,这里推荐一个工具包:bluebird-retry。 bluebird-retry基本用法如下: var retry = require('bluebird-re...

weixin_33682790的博客 913

STC32G电调调试血泪史:从TPH1R403NL MOS管烧毁到PWM信号异常排查全记录

本文详细记录了STC32G无刷电调调试过程中的常见问题与解决方案,包括MOS管烧毁、PWM信号异常等关键故障排查。通过电源系统检测、驱动电路验证及三相平衡调试等实战经验,帮助硬件爱好者快速定位问题,提升电调调试效率。特别针对TPH1R403NL等MOS管的保护措施进行了重点分析。

weixin_33736048的博客 551

OpenAI Node SDK 网络请求全解析:从 API 调用到流式响应处理

在现代 Web 开发中,API 调用是连接客户端与后端服务的核心技术,其底层通常基于 HTTP/HTTPS 协议实现网络通信。理解其工作原理,不仅涉及请求构建、响应处理等基础概念,更需掌握如何通过 SDK(软件开发工具包)封装复杂性,为开发者提供简洁高效的接口。从技术价值看,良好的 SDK 设计能显著提升开发效率,降低集成成本,尤其在处理实时数据流、错误重试等高级场景时体现其工程优势。常见的应用场景包括 AI 模型调用、实时数据推送、第三方服务集成等,其中流式响应(SSE)与异步迭代器(AsyncItera

weixin_30843121的博客 221

RK3576平台Buildroot嵌入式Linux镜像构建实战

嵌入式Linux镜像构建是连接硬件能力与软件功能的核心技术环节,其本质是基于目标SoC架构的交叉编译、内核定制与根文件系统集成过程。原理上依赖工具链适配、设备树绑定、分区镜像生成等关键步骤,技术价值在于实现轻量、确定、可复现的系统交付。典型应用场景涵盖ARM64开发板(如RK3576)、工业边缘网关及国产化信创终端。本文以TaishanPi-3为载体,深入解析Buildroot在RK3576平台上的配置裁剪、并行编译优化、genimage分区合成及update.img烧录准备,覆盖从环境选型(Ubuntu

weixin_36047538的博客 140

时序约束实战:从setup/hold到时钟路径约束的深度解析

本文深度解析数字设计中的时序约束实战,重点探讨如何从setup/hold检查的核心原理出发,理解并应用时钟路径约束。文章通过剖析Path Requirement的计算逻辑,结合同频、倍频及异步时钟域等典型场景,提供了从解读时序报告到编写、调试SDC约束的系统方法,帮助工程师有效应对复杂SoC设计中的时序收敛挑战。

weixin_29291185的博客 105

MySQL节点恢复的终极指南:实现故障节点自动重新加入集群的完整策略

在现代数据库架构中,MySQL节点故障恢复是确保高可用性的关键环节。本文将为您详细介绍如何利用专业的MySQL客户端库实现故障节点的自动重新加入集群功能,确保您的数据库系统始终保持稳定运行。💪 ## 为什么MySQL节点恢复如此重要? 在分布式数据库环境中,节点故障是不可避免的。传统的MySQL连接管理往往需要手动干预,这会导致服务中断时间延长,影响业务连续性。通过智能的节点恢复策略,您可以

gitblog_00009的博客 500

C# .NET6 TesseractOCR 图片文字识别

在你的项目中的tessdata-main文件夹找到这几个文件,并右键->属性设置为【如果较新则复制】有几个需要用到的模型,需要生成的时候复制到输出目录中,在项目中设置即可。TesseractOCR兼容 x86 与 x64。附 :ImageUtils.RegionCropping()源码。Visual Studio 2022 社区版。下载完成后解压在你的项目中,如图所示。从官方项目中获取模型数据, 网址为。

qq_44121554的博客 3854

探索Node.js的智能重试机制:Backoff库

探索Node.js的智能重试机制:Backoff库 在现代软件开发中,处理网络不稳定或服务短暂不可用的情况是家常便饭。为了优雅地应对这些挑战,Node.js开发者们需要一个强大而灵活的重试机制。今天,我们要介绍的就是这样一个解决方案——Backoff库。 项目介绍 Backoff for Node.js是一个开源库,专门为Node.js环境设计,提供了斐波那契和指数两种退避算法。这个库允许开发者以...

gitblog_00882的博客 638

华为OD机试2025A卷 - 分苹果(Java & Python& JS & C++ & C )

华为OD机试2025A卷 - 分苹果(Java & Python& JS & C++ & C )

算法大师! 721

【某音电商】protobuf聊天协议逆向

某音电商私信、聊天消息protobuf协议逆向分析与解析

吴秋霖的博客 2316

node-retry完全指南:轻松实现JavaScript错误重试的终极方案

在JavaScript开发中,网络请求失败、数据库连接超时等问题时常发生。**node-retry**作为一款专注于错误重试的工具库,提供了灵活的指数退避和自定义重试策略,帮助开发者轻松构建健壮的应用程序。本文将从基础安装到高级配置,全面解析node-retry的使用方法,让你彻底掌握JavaScript错误重试的终极解决方案。 ## 快速入门:5分钟上手node-retry ### 一键安装

gitblog_00259的博客 352

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Node.js重试机制库(node-retry)使用指南

**Node.js重试机制库**([tim-kos/node-retry](https://github.com/tim-kos/node-retry.git))是一款强大的错误处理工具,专注于提供指数级和自定义重试策略,以应对网络请求、文件操作等过程中可能出现的失败操作。通过这个库,开发者能够轻松实现对可能失败的操作进行自动重试,特别适用于那些不稳定的服务调用场景,增强应用程序的健壮性。 该模

gitblog_00985的博客 1003

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Elasticsearch Node.js客户端错误处理与重试机制:构建稳定应用的终极指南

在构建基于Elasticsearch的Node.js应用时,错误处理和重试机制是确保系统稳定性的关键因素。Elasticsearch Node.js客户端提供了强大的错误处理能力,能够有效应对网络波动、集群负载、节点故障等常见问题。本文将深入解析客户端的错误处理策略和重试机制,帮助开发者构建更加健壮的应用程序。 ## 为什么错误处理如此重要?🤔 Elasticsearch在生产环境中可能面临

gitblog_00851的博客 470

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Node.js定时任务终极解决方案:node-schedule自动重试机制完整指南

在Node.js应用开发中,定时任务是处理重复性工作的核心需求。无论是数据备份、邮件发送还是系统监控,稳定可靠的定时任务调度都至关重要。**node-schedule**作为一款强大的Node.js定时任务库,提供了类Cron表达式和灵活的API,帮助开发者轻松实现复杂的任务调度逻辑。本文将深入探讨如何利用node-schedule构建具备自动重试能力的定时任务系统,确保关键业务流程的高可用性。

gitblog_00620的博客 856

Node Fetch错误恢复终极指南:5大智能重试策略让网络请求永不失败

在Node.js开发中,网络请求的稳定性直接影响应用可靠性。node-fetch作为轻量级的Fetch API实现,为开发者提供了浏览器风格的网络请求能力,但面对复杂网络环境时,错误处理和请求重试成为保障系统健壮性的关键。本文将分享5种经过实战验证的智能重试策略,帮助你彻底解决node-fetch请求失败问题,确保服务稳定运行。 ## 1. 错误类型精准识别:构建智能重试的基础 node-fe

gitblog_00420的博客 783
上一篇: 利用Mongodb聚合(aggregate)来进行复杂查询的技巧
下一篇: 虚拟机Debian7.7-amd64-standard安装VMware-tools
平仄_csdn
博客等级 码龄10年 11粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值