我一直在写这样的代码,它工作正常。
var result = _.filter(array, function(item){return item[key] === k;});
... // logic using the variable result
但是今天我突然意识到技术上这可能是错误的,因为过滤器可以异步运行,并且过滤器行下方的代码中无法获得结果。
过滤功能是否以同步方式实现?还是我必须记住过滤器功能是异步运行的?
提前致谢!
我一直在写这样的代码,它工作正常。
var result = _.filter(array, function(item){return item[key] === k;});
... // logic using the variable result
但是今天我突然意识到技术上这可能是错误的,因为过滤器可以异步运行,并且过滤器行下方的代码中无法获得结果。
过滤功能是否以同步方式实现?还是我必须记住过滤器功能是异步运行的?
提前致谢!
你可以看看源代码 [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]函数,该函数也是同步的。
并非每个接受回调的函数都必须是异步的!