var async = require('async');
var count = 0;
var list = [{name:'Jack',age:20},{name:'Lucy',age:18}];
async.whilst(
function(){
console.log(count);
return count < list.length;
},
function(callback){
list[count].age += 1;
count++;
},
function(err){
}
);
console.log(list);
- 這段代碼的輸出結果竟然是神奇的:
[ { name: ‘Jack’, age: 21 }, { name: ‘Lucy’, age: 18 } ]
- 問題出在哪呢?
function(callback){
list[count].age += 1;
count++;
}
循環體中沒有調用callback回調
- 猜想:
- 循環體中主動調用callback時表明該循環體執行結束
- whilst也正是靠着這種方式繼續調用下去的
- 驗證:
- 在循環體中主動調用callback後,結果正確
function(callback){
list[count].age += 1;
count++;
callback();
},
[ { name: ‘Jack’, age: 21 }, { name: ‘Lucy’, age: 19 } ]
- 源碼分析:
- //TODO (?????)