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实现获取当前url地址及url各种参数值
Jun 25 NodeJs
nodejs 实现钉钉ISV接入的加密解密方法
Jan 16 NodeJs
angular2+nodejs实现图片上传功能
Mar 27 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
Oct 17 NodeJs
详解NodeJs项目 CentOs linux服务器线上部署
Sep 16 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 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
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Django实现分页功能
2018/07/02 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
python实现串口通信的示例代码
2020/02/10 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
python实例化对象的具体方法
2020/06/17 Python
应用化学专业职业生涯规划书
2013/12/31 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
酒店管理求职信
2014/06/09 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS