欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nodejs中解決異步嵌套循環(huán)和循環(huán)嵌套異步的問題

 更新時(shí)間:2017年07月12日 15:57:02   作者:意外金喜  
本篇文章主要介紹了nodejs中解決異步嵌套循環(huán)和循環(huán)嵌套異步的問題,具有一定的參考價(jià)值,有興趣的可以了解一下

眾所周知,nodejs異步和循環(huán)對(duì)于初學(xué)者來說是一個(gè)很大的問題,今天我們就一起來了解和解決它

當(dāng)異步和循環(huán)同時(shí)出現(xiàn)的時(shí)候這個(gè)問題就會(huì)被放大很多倍.

慶幸的是,大神們研究出了async這個(gè)第三方模塊,解決了node中異步金字塔和循環(huán)問題

async這個(gè)模塊應(yīng)該是nodejs中使用最多的第三方模塊,每個(gè)月下載量3000W+

async基礎(chǔ)使用 : http://www.dbjr.com.cn/article/118526.htm

異步嵌套循環(huán),循環(huán)嵌套異步的例子:

var async = require('async'); 
//初始化 
var async_lists = [{ aa: 11, bb: 21 }, { aa: 31, bb: 41 }, { aa: 51, bb: 61 }, { aa: 71, bb: 81 }, { aa: 91, bb: 91 }]; 
var task = []; 
task.push(function (callback) { 
 console.log('第一個(gè)task任務(wù)'); 
 //循環(huán) 
 async.eachSeries(async_lists, function (async_list, cb) { 
  task_a(async_list, cb) 
 }, function (err) { 
  if (err) return callback(err); 
  //重新賦值 
  async_lists = [{ aa: 12, bb: 22 }, { aa: 32, bb: 42 }, { aa: 52, bb: 62 }, { aa: 72, bb: 82 }, { aa: 92, bb: 92 }]; 
  callback() 
 }); 
}) 
task.push(function (callback) { 
 console.log('第二個(gè)task任務(wù)'); 
 async.eachSeries(async_lists, function (async_list, cb) { 
  task_a(async_list, cb) 
 }, function (err) { 
  if (err) return callback(err); 
  async_lists = [{ aa: 13, bb: 23 }, { aa: 33, bb: 43 }, { aa: 53, bb: 63 }, { aa: 73, bb: 83 }, { aa: 93, bb: 93 }]; 
  callback() 
 }); 
}) 
task.push(function (callback) { 
 console.log('第三個(gè)task任務(wù)'); 
 async.eachSeries(async_lists, function (async_list, cb) { 
  task_a(async_list, cb) 
 }, function (err) { 
  if (err) return callback(err); 
  callback() 
 }); 
}) 
 
//最外層流程控制 
async.waterfall(task, function (err, result) { 
 if (err) return console.log(err); 
 console.log('成功'); 
}) 
 
function task_a(async_list, cb) { 
 var task2 = []; 
 task2.push(function (cb) { 
  console.log('第一次 : ', async_list); 
  setTimeout(function () { 
 
   cb() 
  }, 1000); 
 }) 
 task2.push(function (cb) { 
  console.log('第二次 : ', async_list); 
  console.log('---------------------------'); 
  setTimeout(function () { 
 
   cb() 
  }, 1000); 
 }) 
 //循環(huán)內(nèi)流程控制 
 async.waterfall(task2, function (err, result) { 
  if (err) return cb(err); 
  cb(); 
 }) 
} 

解釋下這個(gè)例子:
首先,最外層使用了async.waterfall這個(gè)方法控制task數(shù)組里的異步任務(wù)執(zhí)行順序,一共push了3個(gè)任務(wù)async.waterfall(task, function (err, result) {},每執(zhí)行完一次task里的任務(wù),重新對(duì)async_lists賦值;

然后,每一個(gè)task任務(wù)里都有一個(gè)同樣的循環(huán),循環(huán)async_lists這個(gè)數(shù)組里的每一個(gè)對(duì)象,使用async.eachSeries控制必須循環(huán)里所有任務(wù)執(zhí)行完畢才往下執(zhí)行;

最后,在eachSeries循環(huán)里又有一個(gè)異步task2任務(wù),這個(gè)任務(wù)分2步,分別打印了傳入進(jìn)來的async_list的值,而且每次打印都使用setTimeout暫停一秒才執(zhí)行下一個(gè)任務(wù).

預(yù)期的結(jié)果是 : 首先執(zhí)行task里的第一個(gè)任務(wù),分別打印2次async_lists這個(gè)數(shù)組里的每個(gè)對(duì)象,而且每次打印間隔一秒,然后對(duì)async_lists重新賦值,執(zhí)行task里的第二個(gè)任務(wù),重復(fù)以上操作.3次完成后打印 成功,結(jié)束任務(wù).


輸出的結(jié)果也是預(yù)期的結(jié)果.

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node綁定全局TraceID的實(shí)現(xiàn)方法

    Node綁定全局TraceID的實(shí)現(xiàn)方法

    這篇文章主要介紹了Node 綁定全局 TraceID的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • node模塊機(jī)制與異步處理詳解

    node模塊機(jī)制與異步處理詳解

    這篇文章主要介紹了node模塊機(jī)制與異步處理詳解的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Nodejs 搭建簡(jiǎn)單的Web服務(wù)器詳解及實(shí)例

    Nodejs 搭建簡(jiǎn)單的Web服務(wù)器詳解及實(shí)例

    這篇文章主要介紹了Nodejs 搭建簡(jiǎn)單的Web服務(wù)器詳解及實(shí)例的相關(guān)資料,并附實(shí)例代碼和實(shí)現(xiàn)效果圖,需要的朋友可以參考下
    2016-11-11
  • NodeJS仿WebApi路由示例

    NodeJS仿WebApi路由示例

    本篇文章主要介紹了NodeJS仿WebApi路由示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Node.js中的文件系統(tǒng)(file system)模塊詳解

    Node.js中的文件系統(tǒng)(file system)模塊詳解

    Node.js文件系統(tǒng)模塊提供了豐富的方法,用于讀取、寫入、操作文件和目錄,文件系統(tǒng)模塊是Node.js強(qiáng)大而靈活的一部分,為文件操作提供了方便的API,本文給大家介紹Node.js中的文件系統(tǒng)(file system)模塊,感興趣的朋友一起看看吧
    2023-11-11
  • Node.js+Express配置入門教程詳解

    Node.js+Express配置入門教程詳解

    下面小編就為大家?guī)硪黄狽ode.js+Express配置入門教程詳解。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • Node.js JSON模塊用法實(shí)例分析

    Node.js JSON模塊用法實(shí)例分析

    這篇文章主要介紹了Node.js JSON模塊用法,結(jié)合實(shí)例形式分析了node.js json模塊的基本語法,以及使用json模塊進(jìn)行json格式數(shù)據(jù)解析的相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • 解讀node.js中的path路徑模塊

    解讀node.js中的path路徑模塊

    這篇文章主要介紹了解讀node.js中的path路徑模塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • node.js中的fs.writeFile方法使用說明

    node.js中的fs.writeFile方法使用說明

    這篇文章主要介紹了node.js中的fs.writeFile方法使用說明,本文介紹了fs.writeFile的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • nodejs環(huán)境快速操作mysql數(shù)據(jù)庫的方法詳解

    nodejs環(huán)境快速操作mysql數(shù)據(jù)庫的方法詳解

    這篇文章主要介紹了nodejs環(huán)境快速操作mysql數(shù)據(jù)庫的方法詳解,需要的朋友可以參考下
    2021-03-03

最新評(píng)論