由於js io 操作的異步特性,所以有很多的流程控制的方法,其中async的whilst主要是用於循環的流程控制,為什么會用到這個async.whilst呢?
有這樣一個問題:
var i = 0; while(i<100){ func.doIo(function(){ dosomething();
// i++; }) i++ }
假如你希望這個循環循環一百次,每一次執行一次里邊的io操作,結果你會發現基本上你沒辦法用while實現這個操作。無論你是把i++放在io的回調里邊還是放在外邊,結果都並不是你想的那樣。
這個時候就需要async.whilst.
看代碼:
var async = require('async'); var i = 0; var j = 0; async.whilst( function(){ console.log('check'+i); return i<6; }, function(whileCb){ j=0; i++; console.log('while:'+i) async.whilst( function(){ //console.log('check'+j); return j<5; }, function(whileCb1){ j++; console.log('whileCb1'+j); whileCb1(); }, function(err){ console.log('second'); whileCb(); // invoke when inner whilst done } ) }, function(err){ console.log(err); } )
這段代碼內層的循環相當於一次io操作(注意:我這是要模擬IO操作,IO操作的特點是異步的,如果是純粹的邏輯運算,就用while就可以實現),我們要實現的目標是外循環循環一次,里邊循環5次。大家注意whileCb()所放的位置,這個位置的意思就是如果到達了條件才再次調用循環,可以仔細理解一下和while的區別。
async.whilst里邊有3個function,第一個是循環條件,第二個是循環體,第三個是結束或者err時進入。所以用whilst可以控制有io的流程控制。
送你幾顆比特幣玩玩: