當一個延遲操作失敗時使用$.when()
時,我收到了意外的結果。
拿這個JavaScript,它創建了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'
,因爲第一次延期沒有失敗。或者我只是在這裏沒有以正確的方式做延期?
如何知道哪些延遲失敗,哪些拒絕參數屬於哪個延遲失敗,如果回調中的參數順序不受尊重?
嗯,不完全如何我會設計它,但我想這使得我的結果是有道理的。 – 2011-04-01 21:27:11