我正在使用jQuery的$.when
和.always
延迟方法从两个不同的端点检索数据集(我无法更改)。
我有一个如下所示的抽象方法:
function getData(reqUrl, reqData) {
var reqType = 'GET';
var contentType = 'application/json;charset=UTF-8';
if(reqData){
reqType = 'POST';
contentType = 'application/x-www-form-urlencoded';
}
return $.ajax({
url: reqUrl,
type: reqType,
data: reqData ? reqData : null,
dataType: 'json',
contentType: contentType
});
}
我有两个调用该函数,如下所示:
var req1 = getData('/path/to/endpoint1', {
dir: 'asc',
sort: 'name',
results: 100,
startIndex: 0
});
var req2 = getData('/path/to/endpoint2');
然后我将这两个传递给jQuery $.when
和.always
,这样即使一个失败,我仍然可以继续处理我回来的数据。
$.when(req1, req2)
.always(function(resp1, resp2) {
console.log(resp1);
console.log(resp2);
});
我希望resp1
能够带回200,并且当我在Chrome开发工具中查看它时会这样做。 resp2
此时应该抛出404,Chrome开发工具也会这样做。
但是,当两个console.log
语句被命中时,resp1将注销状态为404的jqXhr对象,而resp2只记录字符串文字“error”。
如果我从resp2
中移除$.when
,那么一切都按预期工作。也就是说resp1
返回我期望的数据。
如果我从resp1
删除$.when
,那么一切正常,我得到了带有404状态代码的jqXhr对象。
但是当我将它们组合在一起时,resp1
似乎会被resp2
覆盖。我确认他们独立工作,我有点不知所措。