2017-11-09 1 views
0

만약 내가 병렬 호출해야 여러 아약스 요청이 있다고 가정하십시오. 호출해야하는 ajax 요청은 조건에 따라 다릅니다.jquery 아약스 - 조건에 따라 병렬 아약스 호출

나는 아래와 같이 할 수 있지만 실현 가능성이 낮고 사소한 것처럼 보입니다.

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의 목록에 전화를 걸고 싶습니다 .. am i correct? –

답변

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 
})