1

有没有地方可以找到有关 jquery 的 when 函数的更多信息?基本上,我所做的是(伪代码)

$.when(ajaxCall1, ajaxCall2)).done(function(data1, data2) {
console.log(data1);
console.log(data2);
// do something real with the data
});

所以我没有得到的是,在我的 ajaxCall1 中,当它是一个独立函数而不是 jquery 的 when() 时,我曾经做过这样的事情:

    $.ajax({
        url: '/api/platform/' + platform,
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            console.log("Got data");
            self.platforms = data;
            self.eventAggregator.trigger('getplatforms');  
        },
    });

因此,该函数中的数据参数看起来与 $.when() 返回的不同。它看起来像 $.when 通过记录它返回一个数组。所以我盲目地去

self.platforms = data[0];

那么在某个地方是否有更多关于该主题的文档?在不知道是什么的情况下盲目获取数组的第一个参数,我觉得很不舒服,如果调用出现错误我也不知道该怎么办。

我的 ajaxCall1 方法基本上只是返回 $.ajax 调用。

IE

ajaxCall1() {
return $.ajax....
}
4

2 回答 2

1

$.when 根据传入的 Promise 对象的数量做了两件非常不同的事情。

如果你只传入一个 Promise 对象,它将与你习惯的成功回调完全相同。

否则,如果您传入 2 个或更多 Promise 对象,每个参数将是一个数组,其中包含通常传递给成功回调的三个参数。要获得您习惯的内容,请访问所述数组中的第一项。

console.log(data1[0])
console.log(data2[0])

注意,这里假设 promise 对象是 jQXHR 对象。否则,数组将包含传递给延迟对象的解析方法的参数。

http://jsfiddle.net/LSpcK/

于 2013-06-19T02:57:41.317 回答
1

你是对的,文档并不清楚这一点。它说(强调我的):

在将多个 Deferred 对象传递给 jQuery.when 的情况下,该方法从一个新的“主” Deferred 对象返回 Promise,该对象跟踪它已传递的所有 Deferred 的聚合状态。该方法将在所有 Deferred 解析后立即解析其主 Deferred,或者在其中一个 Deferred 被拒绝时拒绝主 Deferred。如果主 Deferred 已解析,则将传递给 jQuery.when 的所有 Deferred 的解析值传递。例如,当 Deferred 是 jQuery.ajax() 请求时,参数将是请求的 jqXHR 对象,按照它们在参数列表中给出的顺序

这是错误的the arguments will be the jqXHR objects。该done方法实际上是传递包含data, status, jqXHR每个请求的数组。

于 2013-06-19T02:19:52.647 回答