कुछ दूरस्थ आमंत्रण (i.e .: AJAX) की प्रतिक्रिया के बाद कोड निष्पादित करने के लिए डिफर्ड बनाया गया था।
तो आप हो सकता है:
load_conf = function (user_id) {
var def = $.Deferred()
$("http://get_conf_data_url?user_id="+user_id).done(function (data) {
var processed_conf = do_something_with(data);
def.resolve(processed_conf);
})
return def.promise();
}
तो आप जा सकते हैं:
load_conf(1).done(function (processed_data) {
do_something_with(processed_data);
});
के बारे में क्या exacly 3 विन्यास लोड करने के बाद कुछ कोड निष्पादित करने के लिए? एन विन्यास लोड हो रहा है जहां एन चर रहा है के बाद कुछ कोड को क्रियान्वित करने के बारे में
$.when(load_conf(1), load_conf(2), load_conf(3)).done(function (c1, c2 ,c3) {
console.log("configurations: ", c1, c2, c3);
})
लेकिन क्या: आप की तरह कुछ कर सकता है? इन मामलों के लिए आप Function.prptotype.apply विधि का उपयोग कर सकते हैं। आप पहले तर्क के रूप में एक ऑब्जेक्ट पास कर सकते हैं जिसे फ़ंक्शन के अंदर "यह" माना जाएगा। दूसरा तर्क पैरामीटर की सूची है लेकिन एक सरणी के अंदर है।
तो आप इस तरह जा सकते हैं:
var defs = [];
for (var i=1; i<=N; i++) {
defs.push(load_conf(i));
}
// here's the magic
$.when($,defs).done(function() {
console.log("All conf loaded: ", arguments);
// arguments contains N processed answers
});
स्रोत
2014-03-14 21:46:23
सी [MDN: 'fun.apply()'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/ लागू) और [सुवक्ता जावास्क्रिप्ट] (http://eloquentjavascript.net/chapter6.html#key5) – gnarf
+1 $ .when.apply के लिए (शून्य, एक विधि) – marverix