यहाँ क्या हो रहा है की एक वंचित उदाहरण है: http://jsfiddle.net/adamjford/YNGcm/20/
HTML:
<a href="#">Click me!</a>
<div></div>
जावास्क्रिप्ट:
function getSomeDeferredStuff() {
var deferreds = [];
var i = 1;
for (i = 1; i <= 10; i++) {
var count = i;
deferreds.push(
$.post('/echo/html/', {
html: "<p>Task #" + count + " complete.",
delay: count
}).success(function(data) {
$("div").append(data);
}));
}
return deferreds;
}
$(function() {
$("a").click(function() {
var deferreds = getSomeDeferredStuff();
$.when(deferreds).done(function() {
$("div").append("<p>All done!</p>");
});
});
});
मैं चाहता हूँ "सब किया!" सभी आस्थगित कार्यों के पूरा होने के बाद प्रदर्शित होने के लिए, लेकिन $.when()
यह पता नहीं चलता है कि आस्थगित वस्तुओं की एक सरणी को कैसे संभालना है। "सब कुछ कर दिया!" पहली बार हो रहा है क्योंकि सरणी एक आस्थगित वस्तु नहीं है, इसलिए jQuery आगे बढ़ता है और यह मानता है कि यह अभी किया गया है।
मुझे पता है कि कोई भी फ़ंक्शन में ऑब्जेक्ट्स को पास कर सकता है, $.when(deferred1, deferred2, ..., deferredX)
लेकिन यह अज्ञात है कि मैं जिस वास्तविक समस्या को हल करने की कोशिश कर रहा हूं, उसमें कितनी आस्थगित वस्तुएं होंगी।
$.when.apply
।