2013-02-20 6 views
5

Ich habe Code wie folgt geschrieben, und es funktioniert gut.Einige Bedenken über die Funktionen in underscore.js async oder sync

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

aber heute wurde mir plötzlich klar technisch dies falsch sein könnte, da der Filter asynchron laufen konnte und das Ergebnis konnte sich nicht im Code unterhalb der Filterzeile zur Verfügung.

Ist die Filterfunktion synchron implementiert? Oder muss ich daran denken, dass die Filterfunktion asynchron läuft?

Vielen Dank im Voraus!

Antwort

11

Sie können an der source code[github] einen Blick:

// 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; 
}; 

Lange Rede kurzer Sinn:_.filter ist synchron und erwartet, dass die Callback-Funktion als auch synchron zu sein (if (iterator.call(context, value, index, list))).

Noch mehr, delegiert die Funktion auf die native .filter[MDN]-Funktion, die auch synchron ist.


Nicht jede Funktion, die einen Rückruf akzeptiert, muss asynchron sein!