2013-02-20 9 views
5

मैं इस तरह कोड लिख रहा हूं, और यह ठीक काम करता है।अंडरस्कोर.जेएस में एसिंक या सिंक होने के कार्यों के बारे में कुछ चिंता

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

लेकिन आज मैं अचानक तकनीकी रूप से महसूस किया फिल्टर एसिंक्रोनस रूप से चला सकते हैं और परिणाम फिल्टर रेखा से नीचे कोड में उपलब्ध नहीं हो सकता है के बाद से यह गलत हो सकता है।

फ़िल्टर फ़ंक्शन सिंक तरीके से कार्यान्वित किया गया है? या क्या मुझे यह ध्यान में रखना होगा कि फिल्टर फ़ंक्शन असीमित रूप से चलता है?

अग्रिम धन्यवाद!_.filter तुल्यकालिक है और उम्मीद है कॉलबैक समारोह के रूप में अच्छी तरह से तुल्यकालिक होने के लिए (if (iterator.call(context, value, index, list))):

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

लंबी कहानी कम:

उत्तर

11

आप source code[github] पर एक नज़र हो सकता है।

और भी, फ़ंक्शन मूल .filter[MDN] फ़ंक्शन को प्रतिनिधि करता है, जो समकालिक है।


कॉलबैक स्वीकार करने वाले प्रत्येक फ़ंक्शन को अतुल्यकालिक नहीं होना चाहिए!

संबंधित मुद्दे