使用时我得到了意想不到的结果$.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/ http://jsfiddle.net/r2d3j/2/
I get fail! f1, f2: ["456 from f2", null]
问题是在.fail()
回调传递的值f2()
拒绝,被路由到第一个参数,我期望f1Value
。这意味着我真的没有办法知道哪个延迟对象实际发布了该内容reject()
,而且我也不知道失败数据到底属于哪个操作。
我本以为.fail()
会得到争论null, '456 from f2'
因为第一次延迟没有失败。或者我只是在这里没有以正确的方式进行延期?
如果不遵守回调中的参数顺序,我如何知道哪些延迟失败,以及哪些拒绝参数属于哪个失败的延迟?