jQuery $ .when似乎没有返回结果列表

时间:2013-03-04 16:20:50

标签: jquery deferred

根据the jQuery docs for $.when,它将返回一个新的延迟(实际上是一个承诺),在所有延迟(传递给$ .when)的情况下,在没有传递延迟的情况下解析结果列表错误。

因此,您希望$.when($.Deferred().resolve(1), $.Deferred().resolve(2))返回一个将使用列表[1,2]解析的延迟。但事实似乎并非如此。 Here's a jsfiddle,其中$ .when的总结果是第一次延迟给予$ .when的结果。

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

1 个答案:

答案 0 :(得分:5)

使用$.when工作时传递给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个参数。