根据the jQuery docs for $.when,它将返回一个新的延迟(实际上是一个承诺),在所有延迟(传递给$ .when)的情况下,在没有传递延迟的情况下解析结果列表错误。
因此,您希望$.when($.Deferred().resolve(1), $.Deferred().resolve(2))
返回一个将使用列表[1,2]解析的延迟。但事实似乎并非如此。 Here's a jsfiddle,其中$ .when的总结果是第一次延迟给予$ .when的结果。
我想我一定是误会或做错了什么,但我看不清楚是什么。谢谢你的帮助!
答案 0 :(得分:5)
使用$.when
工作时传递给done处理程序的参数与$.when
完全相同,每传递一个promise / deferred对象就会得到一个参数。
$(function () {
make = function (x) {
return $.Deferred().resolve(x);
};
$.when(make(15), make(16), make(17)).done(
function (result1, result2, result3) {
$('#hey').text(result1 + "-" + result2 + "-" + result3); // "15-16-17"
}
);
});
如果将3个参数传递给$.when
,则生成的promise对象的.done
方法将接收3个参数。