javascript - async.filter 在所有迭代器完成之前调用回调

标签 javascript async.js

我正在使用 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 对我来说没有任何意义。

最佳答案

问题是 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);

关于javascript - async.filter 在所有迭代器完成之前调用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14345159/

相关文章:

javascript - 从 DOM 元素生成图像

javascript - 如何优化 async.js API 调用?

javascript - 如何使用异步并行将所有回调结果合并到最终回调中

json - 多个异步 mongo 请求生成困惑的返回

javascript - async.whilst 中的 callback 和 err 是做什么用的?

javascript window.var_name 与窗口 ['var_name' ]

javascript - 从 JQuery 到 Javascript 代码

javascript - 事件和回调,需要等待两个事件触发后调用回调

JavaScript 延迟

Javascript 和嵌套的 JSON 问题