node.js async流程控制器--queue(队列)

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’);
}
时间: 2024-07-31 14:31:37

node.js async流程控制器--queue(队列)的相关文章

Node.js异步流程控制

原文地址:Node.js异步流程控制 原文地址:https://www.cnblogs.com/edward852/p/8580917.html

Node.js中流程控制

Node.js中的流程控制可以使用async,在使用之前需要先安装,使用npm安装 npm install async --g 下面主要介绍4种流程控制的方式: 1.串行无关联:async.series(tasks,callback) 多个函数依次执行,之间没有数据交换,其中一个函数出错,后续函数不再执行; 以下是标准写法: async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){

node.js异步控制流程 回调,事件,promise和async/await

写这个问题是因为最近看到一些初学者用回调用的不亦乐乎,最后代码左调来又调去很不直观. 首先上结论:推荐使用async/await或者co/yield,其次是promise,再次是事件,回调不要使用. 接下来是解析,为什么我会有这样的结论 首先是回调,理解上最简单,就是我把任务分配出去,当你执行完了我就能从你那里拿到结果执行相应的回调, 这里演示一个对setTimeout的封装,规定时间后打印相应结果并执行回调函数 并且这个函数传给回调函数的参数符合node标准,第一个为error信息,如果出错e

Node.js——Async

一:流程控制 为了适应异步编程,减少回调的嵌套,我尝试了很多库.最终觉得还是async最靠谱. 地址:https://github.com/caolan/async Async的内容分为三部分: 流程控制:简化十种常见流程的处理 集合处理:如何使用异步操作处理集合中的数据 工具类:几个常用的工具类 本文介绍其中最简单最常用的流程控制部分. 由于nodejs是异步编程模型,有一些在同步编程中很容易做到的事情,现在却变得很麻烦.Async的流程控制就是为了简化这些操作. 1. series(task

node.js async 几个函数

async.waterfallasync.seriesasync.parallelasync.auto http://my.oschina.net/huangsz/blog/176203http://blog.csdn.net/jiangcs520/article/details/17350927http://blog.fens.me/nodejs-async/

使用 async Node.js 简化Javascript代码

async Node.js async 是Javascript的扩展库.它可以简化Node.js异步操作的书写,使代码更容易被读懂,而不是面对多层的括号发疯. 我们可以使用Node.js的包管理器npm直接安装它,在shell中输入: 1 2 npm install async 或者 更改package.json: 1 2 3 4 5 6 7 8 9 10 11 12 13 { "name": "application-name", "version&qu

Node.js随手笔记

1.Node.js的版本控制器--nvm nvm root,查看nvm版本控制工具的根目录 C:\Users\Administrator\AppData\Roaming\nvm nvm做版本控制的原理:通过创建快捷方式的形式来控制node版本的切换 实际应用: 这个是nvm文件夹里面的内容,实际项目中,如果客户那里没有网,可以提前把用到的Node下载到这里面,以这种方式进行保存,需要哪个版本,就在cmd执行nvm use 版本号 备注:要查看nvm文件夹下的setting.txt文件,注意roo

node js 异步执行流程控制模块Async介绍

1.Async介绍 sync是一个流程控制工具包,提供了直接而强大的异步功能.基于Javascript为Node.js设计,同时也可以直接在浏览器中使用. Async提供了大约20个函数,包括常用的 map, reduce, filter, forEach 等,异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等. 项目地址:https://github.com/caolan/async 2. Async安装 npm install async 3.

node.js对mongodb的连接&amp;增删改查(附async同步流程控制)

1.启动mongodb数据库 官网下载mongodb数据库 在mongodb根目录下创建文件夹:假设取名为test. 我们认为test就是mongodb新建的数据库一枚. 创建批处理文件 xxx.bat,内容如下: 运行e盘mongodb文件夹下bin目录下的 mongod.exe,参数为 -dbpath E:\mongodb\test. E:\mongodb\bin\mongod.exe -dbpath E:\mongodb\test 这样就启动了mongodb下test数据库的服务器. 2.