nodejs中sleep功能实现暂停几秒的方法


Posted in NodeJs onJuly 12, 2017

我在网上了解了一下nodejs中sleep功能,搜索了很多关于nodejs中sleep功能介绍,下面我来记录一下,有需要了解的朋友可参考。希望此文章对各位有所帮助。

一 背景

在使用nodejs爬虫的时候,经常会遇到别人的网站对频率的反爬机制,这个时候如果不做处理程序就会挂掉,重新启动也会继续被屏蔽.这个问题怎么解决呢,我的想法就是程序暂停10分钟或者更长的时间,继续爬取.

二 方法

其实使用setTimeout就可以实现,只是nodejs异步已经很金字塔了,再加一层会更恐怖,所以本文使用nodejs的第三方模块async来实现,async的目的就是让多个异步的程序,按照开发者想要的顺序来执行,代码书写符合同步风格,其实运行还是异步的,也解决了回调金字塔的问题.

async基础使用 :https://3water.com/article/118526.htm

三 正常代码

访问3个网站,百度,优酷,腾讯为例.不暂停的代码.

var async = require('async'); 
var http = require('http'); 
var task = []; 
task.push(function(callback){ 
 console.time('访问3个网站时间统计'); 
 http.get('http://www.baidu.com/', function(res) {  
  console.log("百度访问结果: " + res.statusCode);  
  callback(null); 
 }).on('error', function(e) {  
  console.log("百度访问结果: " + e.message); 
  callback(e); 
 }); 
}) 
 
task.push(function(callback){ 
 http.get('http://www.youku.com/', function(res) {  
  console.log("优酷访问结果: " + res.statusCode); 
  callback(null); 
 }).on('error', function(e) { 
  console.log("优酷访问结果: " + e.message); 
  callback(e); 
 }); 
}) 
 
task.push(function(callback){ 
 http.get('http://www.qq.com/', function(res) {  
  console.log("腾讯访问结果: " + res.statusCode); 
  callback(null); 
 }).on('error', function(e) {  
  console.log("腾讯访问结果: " + e.message); 
  callback(e); 
 }); 
}) 
 
async.waterfall(task, function(err,result){ 
 console.timeEnd('访问3个网站时间统计'); 
 if(err) return console.log(err); 
 console.log('全部访问成功'); 
})

四 测试

nodejs中sleep功能实现暂停几秒的方法

执行访问网站需要时间,3个网站访问时间统计254ms.

五 暂停代码

比如,访问第一个网站后暂停5秒,访问第二个网站后暂停10秒.

var async = require('async'); 
var http = require('http'); 
var task = []; 
task.push(function(callback){ 
 console.time('访问3个网站时间统计'); 
 http.get('http://www.baidu.com/', function(res) {  
  console.log("百度访问结果: " + res.statusCode); 
  setTimeout(function() { 
   callback(null); 
  }, 5000); 
 }).on('error', function(e) {  
  console.log("百度访问结果: " + e.message); 
  callback(e); 
 }); 
}) 
 
task.push(function(callback){ 
 http.get('http://www.youku.com/', function(res) {  
  console.log("优酷访问结果: " + res.statusCode); 
  setTimeout(function() { 
   callback(null); 
  }, 10000); 
 }).on('error', function(e) { 
  console.log("优酷访问结果: " + e.message); 
  callback(e); 
 }); 
}) 
 
task.push(function(callback){ 
 http.get('http://www.qq.com/', function(res) {  
  console.log("腾讯访问结果: " + res.statusCode); 
  callback(null); 
 }).on('error', function(e) {  
  console.log("腾讯访问结果: " + e.message); 
  callback(e); 
 }); 
}) 
 
async.waterfall(task, function(err,result){ 
 console.timeEnd('访问3个网站时间统计'); 
 if(err) return console.log(err); 
 console.log('全部访问成功'); 
})

六 测试

nodejs中sleep功能实现暂停几秒的方法

从打印中能看得出,访问第二个网站等待了5秒,访问第三个网站等待了10秒.OK!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
Nodejs如何搭建Web服务器
Mar 28 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
NodeJS整合银联网关支付(DEMO)
Nov 09 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
Jul 05 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
浅谈Node的内存泄露问题
May 06 NodeJs
nodejs中解决异步嵌套循环和循环嵌套异步的问题
Jul 12 #NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 #NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 #NodeJs
nodejs开发微信小程序实现密码加密
Jul 11 #NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 #NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 #NodeJs
Nodejs之http的表单提交
Jul 07 #NodeJs
You might like
网页的分页下标生成代码(PHP后端方法)
2016/02/03 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
微信小程序合法域名配置方法
2019/05/06 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
Python3实现购物车功能
2018/04/18 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python常用特殊方法实例总结
2019/03/22 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
Python是怎样处理json模块的
2020/07/16 Python
python实现取余操作的简单实例
2020/08/16 Python
车间班组长岗位职责
2013/11/13 职场文书
运动会开幕式主持词
2014/03/28 职场文书
班风口号
2014/06/18 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
正规借条模板
2015/05/26 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
Python使用永中文档转换服务
2022/05/06 Python