2017-11-09 12 views
0

私は並列に呼び出される必要がある複数のajax要求があるとします。 呼び出す必要のあるajaxリクエストは条件に基づいています。jquery 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) { 

    }); 
} 
+0

大丈夫ですので、apiのリストへの呼び出しを1つのGO .. am iにしたいのですか? –

答えて

4

アレイはそれを完全にうまく処理できます。各if()ブロックで

、ちょうど配列にあなたの約束を追加します。

apiList.push(apiRequestN()); 

終わりに、あなたは$.when()への個別のパラメータとして各項目に合格する必要があります。

$.when.apply(null, apiList) 
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!') 
    }); 
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 
}) 
関連する問題