2013-02-20 66 views
5

我一直在写这样的代码,并且它工作正常。一些关于underscore.js中的函数是异步或同步

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

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

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

在此先感谢!

回答

11

你可以看看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]函数,该函数也是同步的。


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