async 中的whilst问题
发布于 8 年前 作者 kingzez 6911 次浏览 来自 问答

没有循环,只是按顺序走了一边,直接输出了,我想知道错在哪里,请帮我看一下,谢谢

var async =require('async'),
	count = 0;
	list = [{name:'jack',age:20}, {name:'Lucy',age:18}];
async.whilst(
	function () {return count < list.length;},
	function (callback) {
		console.log(count);
		callback(list[count].age += 1);
		count ++;
 	},
	function(err){
		console.log(err);
	}	
);
console.log(list);
console.log(count);
8 回复

callback 第一参数是error?, 你看最后打印error的地方是不是你在callback传的值, whilst是不是一callback就结束的? 你再看看文档.

@wewea 打印出来是没有错误的,这是结果

0
21
[ { name: 'jack', age: 21 }, { name: 'Lucy', age: 18 } ]
1

楼主琢磨琢磨,看这是不是你想要的结果

async.whilst(
	function() {
		return count < list.length;
	},
	function(callback) {
		console.log('count: ');
		console.log(count);
		if (count < list.length) 	list[count].age += 1
		count++;
		callback();
	},
	function(err) {
		console.log('err:');
		console.log(err);
	}
);

count++的位置放到callback上一行

callback(list[count].age += 1); 这个回调传了 最后一个function function(err){ console.log(err); } 这个err 就是 list[count].age += 1 所以你会打印出 21

var async =require('async');
var count = 0;
var list = [
	{name:'jack',age:20}, 
	{name:'Lucy',age:18}
];

async.whilst(
	function breaker () {
		return count < list.length;
	},
	function iterator (callback) {
		console.log(count);
		callback(null, list[count++].age += 1);
 	},
	function(err){
		console.log(err);
	}	
);

console.log(count);
console.log(list);


@blackjack 谢谢 已经解决了

@dayuoba thanks 受教了 :)

回到顶部