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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 node.js async流程控制器--queue(队列) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

queue流程控制器是一個(gè)并行的流程控制器,但是它與parallel的區(qū)別在于queue可以控制一次執(zhí)行幾個(gè)函數(shù),而parallel只是讓所有函數(shù)并行執(zhí)行.

例子如下:

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);
  }) };

?

這里用了一個(gè)偽異步執(zhí)行的方式,queue的參數(shù)有兩個(gè),第一個(gè)是一個(gè)函數(shù),第二個(gè)是執(zhí)行的進(jìn)程數(shù),第一個(gè)參數(shù)又包含兩個(gè)參數(shù),第一個(gè)是傳遞的對(duì)象,第二個(gè)是回調(diào)函數(shù),例子中只有在console.log(obj)執(zhí)行完后調(diào)用cb();隊(duì)列才會(huì)往下執(zhí)行,queue會(huì)返回一個(gè)標(biāo)識(shí)符(例子中的q).

例子中的q.push是往隊(duì)列中添加數(shù)據(jù)(會(huì)被queue里的obj接收),第二個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),如果有異常會(huì)觸發(fā)此回調(diào)函數(shù)。例子中每次只插入一個(gè)數(shù)據(jù),也可以插入多個(gè)例如q.push([{name:0,time:1000}],{name:1,time:2000}]);(這里是個(gè)數(shù)組).

這里為了確認(rèn)循環(huán)是否真的執(zhí)行,所以在循環(huán)中打印了兩個(gè)數(shù)字.執(zhí)行的結(jié)果是先循環(huán)打印了console.log(1)然后再循環(huán)打印了console.log(2),這里說(shuō)明 ?確實(shí)兩個(gè)循環(huán)執(zhí)行到了,然后會(huì)先把第一個(gè)循環(huán)加入到queue里的對(duì)象打出來(lái),然后把第二個(gè)循環(huán)打印出來(lái),充分遵守了隊(duì)列的性質(zhì):先進(jìn)先出,后進(jìn)后出的規(guī)則,不會(huì)因?yàn)橐驗(yàn)閳?zhí)行的時(shí)間而使得結(jié)果混亂.如果把queue里的工作數(shù)改為2,則會(huì)每次打印兩個(gè).

?

queue還有幾個(gè)函數(shù),比如:

worker數(shù)量將用完時(shí),會(huì)調(diào)用saturated函數(shù):

q.saturated = function() { log(‘a(chǎn)ll workers to be used’); }

?

當(dāng)最后一個(gè)任務(wù)交給worker執(zhí)行時(shí),會(huì)調(diào)用empty函數(shù)

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

?

當(dāng)所有任務(wù)都執(zhí)行完時(shí),會(huì)調(diào)用drain函數(shù)

q.drain = function() { console.log(‘a(chǎn)ll tasks have been processed’); }

?

轉(zhuǎn)載于:https://www.cnblogs.com/tudou1223/p/4151851.html

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。