我有一组ajax请求:
let requests = urls.map(function(url){
return $.ajax({url: url, dataType: 'json'});
});
我想要处理它们。我正在使用when
:
$.when(...requests).then(function(...responses){
let processed = responses.map(function(responseRaw, index){
let response = responseRaw[0];
return /*some processed request*/;
});
//do something else
}).fail(function(error){
//process errors
});
jquery返回responseRaw
:它是类似数组的对象,包含数据,状态和其他内容。这适用于多个请求,但是失败了一个请求:而不是一个参数函数,然后期望一个三参数函数(responseRaw spreaded)。这不是传播操作符问题,而是jquery问题。
如何避免?我的解决方法:
$.when(...requests).then(function(){
let responses;
if (arguments.length == 3 && arguments[1] == "success"){
responses = [arguments];
} else {
responses = Array.from(arguments);
}
(顺便说一句,是否有更简洁的方法来获取数据而不是responseRaw[0]
?)
答案 0 :(得分:0)
在.When() and .done() using an array with .done中描述了同样的问题。似乎没有更好的解决方案:根据JQuery文档
如果将单个Deferred传递给jQuery.when(),则其Promise对象(a 方法返回延迟方法的子集。