我正在使用caolan's async.js。我很困惑为什么在所有迭代器完成之前调用回调。当我运行以下代码时:
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
对我来说,在过滤器循环中检查第二个results.fields
项之前调用回调中的console.log没有任何意义。
答案 0 :(得分:6)
问题是,即使您达到callback(false)
条件,也会每次调用if
。正确的方法是添加return
语句:
if(item.id == 130 || item.id == 131) {
console.log('calling field true: ' + item.id);
return callback(true); // now you won't call callback(false) everytime
}
callback(false);
你甚至可以通过说:
来缩短过滤器callback(item.id == 130 || item.id == 131);
答案 1 :(得分:0)
经过多次实验,我发现问题是回调(假);线。显然这导致过滤器退出。我想这很有意义,因为它会强制调用回调。