有些人担心underscore.js中的函数是异步还是同步

时间:2013-02-20 18:47:28

标签: javascript asynchronous underscore.js

我一直在编写这样的代码,它运行正常。

var result = _.filter(array, function(item){return item[key] === k;});
... // logic using the variable result

但今天我突然意识到这可能是错误的,因为过滤器可以异步运行,结果无法在过滤器行下面的代码中找到。

过滤功能是否以同步方式实现?或者我必须记住过滤器功能是异步运行的吗?

提前致谢!

1 个答案:

答案 0 :(得分:12)

您可以查看source code [github]

// Return all the elements that pass a truth test.
// Delegates to **ECMAScript 5**'s native `filter` if available.
// Aliased as `select`.
_.filter = _.select = function(obj, iterator, context) {
  var results = [];
  if (obj == null) return results;
  if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
  each(obj, function(value, index, list) {
    if (iterator.call(context, value, index, list)) results[results.length] = value;
  });
  return results;
};

长话短说: _.filter是同步的,并且期望回调函数同步(if (iterator.call(context, value, index, list)))。

更重要的是,该函数委托给本机.filter [MDN]函数,该函数也是同步函数。


并非每个接受回调的函数都必须是异步的!