jquery ajax when - 基于条件的并行ajax调用

时间:2017-11-09 17:42:33

标签: javascript jquery ajax

假设我有多个需要并行调用的ajax请求。 需要调用的ajax请求基于条件。

我可以按照以下方式进行,但似乎不可行且无关紧要。

if (condition1) {
    $.when(
        apiRequest1();
    ).then(function(result1) {

    });
} else if (condition 2) {
    $.when(
        apiRequest2();
    ).then(function(result1) {

    });
} else if (condition 1 && condition 2) {
    $.when(
        apiRequest1();
        apiRequest2();
    ).then(function(result1, result2) {

    });
}

我想要实现的目标如下。概念如下,但如何做到?

var apiList = [];


if (condition1) {
    append apiRequest1() to apiList;
}

if (condition2) {
    append apiRequest2() to apiList;
}

if (condition3) {
    append apiRequest3() to apiList;
}

if (conditionN) {
    append apiRequestN() to apiList;
}

if (apiList has value) {
    $.when(
        apiList
    ).then(function (resultN) {

    });
}

3 个答案:

答案 0 :(得分:4)

阵列可以完美地处理。

在每个if ()块中,只需将您的承诺附加到数组:

apiList.push(apiRequestN());

最后,您需要将每个项目作为单独的参数传递给$.when()

$.when.apply(null, apiList)

答案 1 :(得分:0)

尝试这个解决方案:

  var async1 = $.ajax({//call 1
        url:'http://mypage.com',
        success: function(data1){
            //data 1
        }
    });

    ....

    var async2 = $.ajax({//call 2
        url:'http://mypage.com',
        success: function(data2){
            //data2
        }
    });

    $.when(async2, async1).done(function(result2, result1) {
        console.log('done!')
    });

答案 2 :(得分:0)

var apiList = [];

if (condition1) {
    apiList.push(apiRequest1());
} else if (condition 2) {
    apiList.push(apiRequest2());
} else if (condition 1 && condition 2) {
    apiList.push(apiRequest1());
    apiList.push(apiRequest2());
}

Promise.all(apiList).then((result1, result2) => {
    //Do your thing with the results
})