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文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
轻松创建nodejs服务器(10):处理上传图片
Dec 18 NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
对python中的装包与解包实例详解
2019/08/24 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
西部世纪面试题
2014/12/05 面试题
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
爱祖国演讲稿
2014/05/04 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
高三语文复习计划
2015/01/19 职场文书
趣味运动会口号
2015/12/24 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
Python find()、rfind()方法及作用
2022/12/24 Python