JQuery:用when处理几个ajax响应

时间:2018-03-19 10:56:43

标签: javascript jquery ajax

我有一组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]?)

1 个答案:

答案 0 :(得分:0)

.When() and .done() using an array with .done中描述了同样的问题。似乎没有更好的解决方案:根据JQuery文档

  

如果将单个Deferred传递给jQuery.when(),则其Promise对象(a   方法返回延迟方法的子集。