$.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]));
});
Run Code Online (Sandbox Code Playgroud)
自己运行:http://jsfiddle.net/r2d3j/2/
我明白了 fail! f1, f2: ["456 from f2", null]
问题是在.fail()回调中,随f2()拒绝传递的值被路由到第一个参数,我希望在那里f1Value.这意味着我真的没有办法知道哪个延迟对象实际发布了这个reject(),而且我也不知道故障数据实际属于哪个操作.
我原以为这.fail()会得到参数,null, '456 from …