我正在使用caolan's async.js。我很困惑爲什麼在所有的迭代器完成之前回調函數都會被調用。當我運行下面的代碼:async.filter在所有迭代器完成之前調用回調
async.filter(matched_objects.fields, function(item, callback) {
console.log('checking field: ' + item.id);
if(item.id == 130 || item.id == 131) {
console.log('calling field true: ' + item.id);
callback(true);
}
callback(false);
},
function(fieldResults) {
console.log('fieldsResults.length=' + fieldResults.length);
});
我得到以下輸出:
checking field: 130
calling field true: 130
fieldsResults.length=1
checking field: 131
calling field true: 131
它沒有任何意義,我認爲在回調中的console.log是獲得第二之前調用在過濾器循環中檢查results.fields
項目。
是的 - 因爲這個職位,我已經過了幾次這個教訓。 – akronymn
我也是! ;) – Mrchief
在你的第二個例子中,這只是返回語句,你把你的回調放在哪裏?爲什麼你需要一個'返回'?如果你想避免if/else爲了簡單起見,你不需要像'callback(item.id == 130 || item.id == 131)'這樣的東西嗎?對不起,我知道這已經有幾年了,在網上關於這種方法的例子並不多。謝謝。 – 1252748