由于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的流程控制。