【问题标题】:Combining deferred responses [duplicate]结合延迟响应[重复]
【发布时间】:2015-03-17 02:54:03
【问题描述】:

当使用 jQuery Deferred 的 $.when 将响应组合成一个数组时,是否可以?

var promise = $.when(
    ajaxRequest1,
    ajaxRequest2
);

promise.done(callback);

“回调”函数看起来像function callback(resp, options)。请注意它如何只接受一个响应。

我认为以下可能有效,但没有。

var promise = $.when(
    ajaxRequest1,
    ajaxRequest2
);
promise.then(function(resp1, resp2) {
    return [resp1, resp2];
});

【问题讨论】:

    标签: javascript jquery promise


    【解决方案1】:

    问题在于 jQuery 使用 3 个参数解析其 ajax 承诺,然后当您在多个承诺上使用 $.when 时,这些参数会变成一个值数组。要仅获取 data(每个 ajax 回调的第一个参数),请使用

    var promise = $.when(
        ajaxRequest1,
        ajaxRequest2
    ).then(function(resp1, resp2) {
        return [resp1[0], resp2[0]];
    });
    

    【讨论】:

    • 感谢您的回答。原来“.then”需要链接到“.when”(如您的代码示例所示)。如果您执行“promise.then()”,它将无法按预期工作,这是有道理的,因为您正在操作 promise 子集,而不是完整的延迟对象。
    • 好吧,你只需要使用.then()调用的返回值而不是把它扔掉。它是对变量进行操作还是直接链接,以及您是否在延迟或承诺上调用它并不重要。
    • 查看这个 jsfiddle jsfiddle.net/jbarreiros/0jyhrsmr。根据是否被链接,它会给出不同的结果。
    • @jbarreiros:抱歉不清楚。我的意思是this 是“不直接链接到when”。当然你需要使用then()调用的结果。
    • 啊,我明白了。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多