2017-02-09 2 views
-1

동적으로 결정되는 ajax 호출 목록을 하나씩 만들어야합니다. 약속은 모든 브라우저에서 동등하게 구현되지 않기 때문에 이전에 완료된 후에 각 아약스 호출을 수행 할 수있는 방법이 있습니까?순서대로 ajax 호출을 실행하십시오.

var favoritesArray = [1,2,3] //dynamically created by user 
var arrayOfCalls = $.each(favoritesArray, function each(idx) { 
    var favId = favoritesArray[idx]; 
    return $.ajax({ url: '/favorites/' + favId, type: 'DELETE' }); 
}); 
$.when(arrayOfCalls) 
.then(function success() { 
    doStuff(); 
}); 

모든 호출이 실행되지만 완료 이전 기다리지 않습니다

이 나는 ​​노력했다. 그것을 성취 할 수있는 방법이 있습니까?

+0

왜 걱정하는지 잘 모르시겠습니까? 이들 중 어느 것도 이전 것에 의존하지 않는 것으로 보입니다. '$ .when'은 일관성있는 크로스 브라우저가 될 것이지만'$ .each'에서 아무것도 반환되지 않으므로'arrayOfCalls'은 정의되지 않을 것입니다. – charlietfl

+0

각 호출은 동일한 목록을 업데이트하고 동시에 호출이 해고되면, 목록은 처음에 완료 한 내용에 따라 정확하지 않을 것입니다. – ebbishop

+0

$ .each에 대한 메모 주셔서 감사합니다. – ebbishop

답변

0

재귀를 사용할 수 있습니다. https://jsfiddle.net/b18vo9ds/

당신은 AJAX 요청과의 setTimeout을 대체 할 수 있으며, AJAX 요청의 성공에 함수를 호출 resursive :

function syncExecute(index,length){ 
var favId = favoritesArray[index]; 
setTimeout(function(){ 
if(index<length){ 
     syncExecute(index+1,length); 
      console.log(index); 
     }else{ 
     console.log("All Call Executed"); 
     } 
},5000); 

} 

syncExecute(0,favoritesArray.length); 

데모 (내가 AJAX 요청의 장소에서의 setTimeout을 사용).

관련 문제