queue流程控制器是一个并行的流程控制器,但是它与parallel的区别在于queue可以控制一次执行几个函数,而parallel只是让所有函数并行执行.

例子如下:

var q = async.queue(function (obj,cb) {setTimeout(function () {console.log(obj);cb();
},obj.time)
},1)for (var i = 0; i<100; i++) {  console.log(1);    q.push({name:i,time:i*1000},function (err) {
      console.log(err);  })
};for (var i = 0; i<100; i++) {console.log(2);q.push({name:1,time:1000},function (err) {    console.log(err);  })
};

这里用了一个伪异步执行的方式,queue的参数有两个,第一个是一个函数,第二个是执行的进程数,第一个参数又包含两个参数,第一个是传递的对象,第二个是回调函数,例子中只有在console.log(obj)执行完后调用cb();队列才会往下执行,queue会返回一个标识符(例子中的q).

例子中的q.push是往队列中添加数据(会被queue里的obj接收),第二个参数是一个回调函数,如果有异常会触发此回调函数。例子中每次只插入一个数据,也可以插入多个例如q.push([{name:0,time:1000}],{name:1,time:2000}]);(这里是个数组).

这里为了确认循环是否真的执行,所以在循环中打印了两个数字.执行的结果是先循环打印了console.log(1)然后再循环打印了console.log(2),这里说明  确实两个循环执行到了,然后会先把第一个循环加入到queue里的对象打出来,然后把第二个循环打印出来,充分遵守了队列的性质:先进先出,后进后出的规则,不会因为因为执行的时间而使得结果混乱.如果把queue里的工作数改为2,则会每次打印两个.

queue还有几个函数,比如:

worker数量将用完时,会调用saturated函数:

q.saturated = function() { log(‘all workers to be used’);
}

当最后一个任务交给worker执行时,会调用empty函数

q.empty = function() { log(‘no more tasks wating’);
}

当所有任务都执行完时,会调用drain函数

q.drain = function() { console.log(‘all tasks have been processed’);
}

转载于:https://www.cnblogs.com/tudou1223/p/4151851.html

node.js async流程控制器--queue(队列)相关推荐

  1. 基于NODE.JS与KUE搭建消息队列[转]

    转自http://blog.xiamingxing.com/archives/262 基于node.js与kue搭建消息队列 xiamingxingnodejs0 Comment 背景 在计算机科学中 ...

  2. node mysql await_javascript – node.js async / await与MySQL一起使...

    我需要将所有结果同步并附加到带有async / await关键字的字符串,例如c# 我是node.js的新手,我无法将这种新语法适应我的代码. var string1 = ''; var string ...

  3. Node.js Async Await in ES7

    原文 http://stackabuse.com/node-js-async-await-in-es7/ One of the most exciting features coming to Jav ...

  4. Node.js async/awit

    1:NodeJS 是什么 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. No ...

  5. node.js async循环数组的方法

    Collections 集合处理 async.forEachOf  |  eachOf(object, iterator, callback) 实现功能:遍历object对象执行iterator,报错 ...

  6. node.js async await 配合Promise对象使用

    function getData(){return new Promise(function(resolve, reject){setTimeout(function(){var uname = 'z ...

  7. node.js async/await 继发执行与并发执行

    async/await 继发执行与并发执行,看如何控制 两个异步函数 foo bar function foo() {return new Promise((resolve, reject) => ...

  8. node.js的开发流程_Node.js子流程:您需要了解的一切

    node.js的开发流程 by Samer Buna 通过Samer Buna Node.js子流程:您需要了解的一切 (Node.js Child Processes: Everything you ...

  9. node js fork php,Node.js中execFile,spawn,exec和fork简介

    Node.js中execFile,spawn,exec和fork简介 Node.js子流程child_process模块提供四种不同方法执行外部应用: 所有这些都是异步,调用这些方法会返回一个对象,这 ...

最新文章

  1. numpy.logspace()产生一个数组
  2. 高逼格的画图:VIM原来可以这样玩
  3. Ruby之Rspec的报错解决
  4. 中小企业实施ERP更多是需要发展的眼光与坚定的决策
  5. 用Python实现-----按要求修改文件名
  6. 有研究irrlicht引擎的吗,交流交流
  7. 作者:张峰(1978-),男,博士,国家海洋信息中心副研究员
  8. 管理成本降低10%,且看制造企业如何打造“智慧供应链”
  9. springmvc接收参数
  10. [转] MySQL树结构递归查询处理
  11. Matlab简单图像运算实例
  12. 行政组织理论-阶段测评3
  13. 三维随机介质模型matlab,基于随机介质理论的复合材料孔隙二维形貌几何仿真
  14. Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装GPT磁盘。
  15. 微信小程序帮你赚到第一桶金
  16. linux鼠标切换窗口的快捷键设置,Xshell中如何设置鼠标快捷键
  17. docker-compose开机自启动设置
  18. openwrt修改lan口地址失败_OpenWrt刷机后LAN口无法连通的问题
  19. 若初见,若寻常,若是一双人
  20. DevOps 测试实践

热门文章

  1. Readiness 探测 - 每天5分钟玩转 Docker 容器技术(144)
  2. 芝麻信用很高,为什么贷款还是被拒了?
  3. 单片机编程主函数的特点
  4. 查询计算机端口号被谁占用了
  5. 怎么把 CDialogBar像工具条一样使用,有图有真相
  6. php的修改数据库语句怎么写,php的数据库修改语句是什么
  7. linux找不到光口,以太坊查看命令_求助 输入ifconfig命令 后看不到eth0但是有eth3和eth4-CSDN论坛_区块链百科...
  8. selenium+Java自动化
  9. SCRIPT70: 没有权限
  10. 763 Hex Conversion