node-day6

Posted sisimu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node-day6相关的知识,希望对你有一定的参考价值。

// 模块导入
// 控制并发 async 模块   用到async模块mapLimit(arr, limit, iterator, callback) 接口
var async  = require(‘async‘);
// 返回内容函数
var current = 0;// 计数器,控制5条
var urls = [];//伪造一个假的url请求数组
for(var i = 0; i < 30; i++) {
    urls.push(‘http://datasource_‘ + i);
}
function fetchUrl(url ,callBack){
    // 模拟
    // callBack()
    var delay = parseInt((Math.random() * 10000000) % 2000, 10);//模拟延时,为随机数
    current++;//每调用一次,计数器加1
    console.log("当前正在抓取的地址是"+ url+"并发数为:" +current+"耗时:"+delay+"秒");
    setTimeout(function(){  //setTimeout 当前js全部执行完后才执行  当第五条console.log↑↑执行完后开始走setTimeout这个setTimeout 
                            // 是抓取完的url的setTimeout,(每个url都会调用一次fetchUrl,就都会有个setTimeout,这个setTimeout相当于请求的耗时)
        console.log("我是时延里的内容"+current);
        current--;  //当执行完一条时,计数减一
        callBack(null,url+‘content‘);
        console.log(url+"当前完成地址");
    },delay)
}

// 控制并发数  mapLimit(arr, limit, iterator, callback) 接口  iterator迭代函数
async.mapLimit(urls,5,function(url,callback){  //mapLimit 可自动拼接每次返回的结果 最后放入res里  url 为iterator迭代函数的第一个参数,代表每次要去调用fetchUrl的地址,是urls里的一个子元素; 这里的callback 是mapLimit已经做好的callback ,
                                                // 相当于把callback结果返回给了mapLimit第三个参数,第三参数会自己在内部做一个拼接,最后放入res里
    fetchUrl(url,callback);
},function(error,res){
    console.log(‘final:‘);
    // console.log(res);
})

l啦啦啦,使用async控制并发数量。加了自己的理解,觉得好绕啊,也许有错的。啦啦啦,但是我觉得这里理解的通顺。

输出结果: 

技术分享图片

技术分享图片

 

以上是关于node-day6的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段6——CSS选择器

找到我的自定义代码片段 Xcode 6?

Xcode 4.6 的备份代码片段

Notepad++编辑器——Verilog代码片段直接编译

Drupal 6 视图 2:PHP 片段

JavaScript 片段