有关underscore.js中的函数是异步还是同步的一些疑虑

6

我一直以这样的方式编写代码,它运行得很好。

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

但是今天我突然意识到,从技术上讲,这可能是错误的,因为过滤器可能会异步运行,并且结果在过滤器行以下的代码中可能不可用。
过滤器函数是同步实现的吗?还是我必须记住过滤器函数是异步运行的?
提前谢谢!
1个回答

12

您可以查看源代码[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]函数,它也是同步的。


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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接