async whilst使用注意

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 (?????)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章