तो jQuery deferreds और $.when
का उपयोग समानांतर में कई ऑब्जेक्ट्स लोड करने के लिए।सफलता में jquery स्थगित मोड़ विफलता
$.when(
a.ajax(), b.ajax(), c.ajax()
).then(
//do something when all are complete
complete();
);
अब, b.ajax()
कभी-कभी असफल हो जाएगा, लेकिन मुझे वास्तव में परवाह नहीं है। मैं सिर्फ तब तक इंतजार करना चाहता हूं जब तक कॉल पूरी होने से पहले सभी कॉल पूरी नहीं हो जातीं()।
दुर्भाग्यवश, जैसे ही b
विफल रहता है, when()
अस्वीकार करता है, और then()
कॉलबैक को कभी भी नहीं चलाता है। यह $.when()
के लिए AFAIK अपेक्षित व्यवहार है, हालांकि इस मामले में मुझे सूट है।
मैं प्रभावी रूप से एक तरह से कहना चाहता हूँ:
$.when(
a.ajax(), b.ajax().fail(return success), c.ajax()
).then(...)
या शायद when()
, या एक अधिक उपयुक्त निर्माण का उपयोग करने के लिए एक अलग तरीके है?
$.onCompleteSucceed = function(oldDfd) {
var newDfd = $.Deferred();
oldDfd.always(newDfd.resolve);
return newDfd.promise();
}
फिर आप इस विधि में उपयुक्त कॉल लपेट सकता है::
@Ates मुझे लगता है कि आपके हटाए गए उत्तर को वापस लौटने से पहले उस नए स्थगित ऑब्जेक्ट को हल करके ठीक किया जा सकता है। – Alnitak
संभावित डुप्लिकेट [$। डिफर्ड: जब हर वादा निष्पादित किया गया है तो कैसे पता लगाया जाए] (http://stackoverflow.com/q/19177087/1048572) – Bergi