日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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’); }

?

轉載于:https://www.cnblogs.com/tudou1223/p/4151851.html

總結

以上是生活随笔為你收集整理的node.js async流程控制器--queue(队列)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。