2

根据$.when 的 jQuery 文档,它将返回一个新的 deferred(实际上是一个 promise),在所有 deferred(传递给 $.when)没有错误地解决的情况下,它会使用传递的 deferreds 的结果列表来解析.

所以你会期望$.when($.Deferred().resolve(1), $.Deferred().resolve(2))返回一个可以用列表 [1, 2] 解析的延迟。但情况似乎并非如此。这是一个 jsfiddle,其中整体 $.when 结果是第一个延迟给 $.when 的结果。

我想我一定是误解或做错了什么,但我看不出是什么。谢谢你的帮助!

4

1 回答 1

5

使用$.whenwork 时传递给 done 处理程序的参数与 完全相同$.when,每个传入的 promise/deferred 对象都会得到一个参数。

http://jsfiddle.net/Dx3Jd/4/

$(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 个参数。

于 2013-03-04T16:24:11.953 回答