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的模块写法入门(实例代码)
Mar 07 NodeJs
用nodejs写的一个简单项目打包工具
May 11 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
详解nodejs微信公众号开发——5.素材管理接口
Apr 11 NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 NodeJs
nodejs制作小爬虫功能示例
Feb 24 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
destoon数据库表说明汇总
2014/07/15 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
puppeteer库入门初探
2019/01/09 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
python版大富翁源代码分享
2018/11/19 Python
python根据url地址下载小文件的实例
2018/12/18 Python
python实现合并两个排序的链表
2019/03/03 Python
pandas中ix的使用详细讲解
2020/03/09 Python
物业公司采购员岗位职责
2013/12/31 职场文书
运动会100米解说词
2014/01/23 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
品质主管岗位职责
2014/03/16 职场文书
特教教师先进事迹
2014/05/21 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
名人演讲稿范文
2014/09/16 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python