$.when()
का उपयोग करते समय मुझे एक अप्रत्याशित परिणाम मिल रहा है जब स्थगित संचालन में से कोई भी सफल नहीं होता है।
इस जावास्क्रिप्ट को लें, जिसने 2 स्थगित किए हैं। पहला सफल होता है और दूसरा विफल रहता है।
var f1 = function() {
return $.Deferred(function(dfd) {
dfd.resolve('123 from f1');
}).promise();
};
var f2 = function() {
return $.Deferred(function(dfd) {
dfd.reject('456 from f2');
}).promise();
};
$.when(f1(), f2())
.then(function(f1Val, f2Val) {
alert('success! f1, f2: ' + JSON.stringify([f1Val, f2Val]));
})
.fail(function(f1Val, f2Val) {
alert('fail! f1, f2: ' + JSON.stringify([f1Val, f2Val]));
});
भागो यह अपने आप: http://jsfiddle.net/r2d3j/2/
मैं fail! f1, f2: ["456 from f2", null]
मिल समस्या यह है कि .fail()
कॉलबैक में f2()
अस्वीकृति के साथ भेजे गए मान, पहला तर्क है, जहां मैं उम्मीद करने से कराई जा रही है f1Value
। जिसका अर्थ है कि मेरे पास वास्तव में यह जानने का कोई तरीका नहीं है कि किस अव्यवस्थित वस्तु ने वास्तव में reject()
पोस्ट किया है, और मुझे यह भी नहीं पता कि विफलता डेटा वास्तव में किस ऑपरेशन से संबंधित है।
मुझे उम्मीद थी कि .fail()
तर्कों को null, '456 from f2'
मिलेगा क्योंकि पहले स्थगित विफल नहीं हुआ था। या क्या मैं यहां सही तरीके से स्थगित नहीं कर रहा हूं?
मुझे कैसे पता चलेगा कि कौन से स्थगित विफल हुए, और कॉल अस्वीकरण में तर्क आदेश का सम्मान नहीं किया गया है, जो अस्वीकृति तर्क विफल हैं?
हम्म, मैं इसे कैसे डिजाइन नहीं करता था, लेकिन मुझे लगता है कि मेरा परिणाम समझ में आता है। –