Node.js方法错误自动重试的实现
来源:互联网 发布:清华大学有网络教育吗 编辑:程序博客网 时间:2024/05/16 10:29
在使用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); }})();
阅读全文
0 0
- Node.js方法错误自动重试的实现
- node.js遇到的错误
- iOS客户端与服务器端Node.js实现通信的方法
- node js 进阶-node的多核实现
- node js- 路由转发和失败重试策略
- 升级node.js的方法
- Node.js实现的BigPipe
- 优雅的repo sync自动重试
- rabbitmq可靠发送的自动重试机制
- rabbitmq可靠发送的自动重试机制
- 优雅的repo sync自动重试
- rabbitmq可靠发送的自动重试机制
- Node.js数据库连接语句的使用错误
- Volley框架的错误重试机制分析
- node.js错误集锦
- Node.js 错误集锦
- Node.js实现ES6代码自动编译--Babel
- javascript(js)自动刷新页面的实现方法总结
- Oracle数据库基础(三)
- [编程题] 构造队列
- poj 3273 二分枚举
- Java——Java集合Set
- 51nod 1179 最大的最大公约数
- Node.js方法错误自动重试的实现
- C/C++堆栈
- 使用FormData来提交表单同时上传文件到服务端
- String类和包装类
- 精品微信小程序源码demo推荐-仿饿了么点餐
- MySQL 存储过程 : procedure
- 最小的K个数
- 编译openwrt时报错 Permissions for installing coreutils with pkgsrc on NetBSD
- C#学习2:网上摘录以备学习-------多线程的作用