前言
上回参考《使用 eventproxy 控制并发》学习未能解决网站对并发请求进行限制的问题。这回继续学习《使用 async 控制并发》,目标是输出 CNode(https://cnodejs.org/ ) 社区首页的所有(40个)主题的标题,链接和第一条评论。
一个简单的callback实例
function add_callback(p1, p2 ,callback) {
var my_number = p1 + p2;
callback(my_number);
}
add_callback(5, 15, function(num){
console.log("call " + num);
});
//call 20
add_callback函数的第三个参数是回调函数。当函数执行时,传递的结果作为callback的参数。
async.mapLimit
async是一个流程控制工具包,提供了直接而强大的异步功能。基于Javascript为Node.js设计,同时也可以直接在浏览器中使用。
async异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等。
async主要实现了三个部分的流程控制功能:
- 集合: Collections
- 流程控制: Control Flow
- 工具类: Utils
这次用到的是集合中的mapLimit(coll, limit, iteratee, callback opt)
每次以指定的最大limit
数执行异步操作。参数如下:
名称 | 类型 | 描述 |
---|---|---|
coll | Array / Iterable / object | 要迭代的集合。 |
limit | number | 一次异步操作的最大数量。 |
iteratee | AsyncFunction | 对于 coll 中的每一个item,迭代执行该异步函数。用(item, callback) 调用,callback 可选。 |
callback | [ function ] | 所有iteratee 函数完成后或发生错误时触发的回调函数。用(err, results) 调用。results 可以是iteratee |