【发布时间】:2011-07-27 22:52:11
【问题描述】:
我在使用$.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',因为第一个 deferred 没有失败。还是我只是在这里没有正确执行延期?
如果不遵守回调中的参数顺序,我如何知道哪些延迟失败,以及哪些拒绝参数属于哪个失败的延迟?
【问题讨论】:
标签: javascript jquery jquery-deferred