nodejs async.whilst用法
由于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的流程控制。
送你几颗比特币玩玩: