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

 

送你几颗比特币玩玩:

https://www.coincola.app/acts/red-packet?type=invitation&packet_id=gBbVudr7GwuTF3r71ihUq8vDiuiNdAgL&lang=zh-CN

 

posted @ 2017-03-05 12:14  三尺剑  阅读(6526)  评论(0编辑  收藏  举报