경쟁 조건이 없습니다. 작업이 끝나면 감소를 수행하라는 요청마다 추가 요구 사항이 있습니다 (! 항상 http 오류가 포함 된 포함). 그러나 이는 호출을 감싸는 방식으로보다 캡슐화 된 방식으로 처리 될 수 있습니다.
테스트되지 않은,하지만이 요점이다 (I 대신 카운터의 객체를 구현, 그래서 이론적으로 특정 요청에 대한보다 세부적인 쿼리하려면이를 확장 할 수 있습니다) :
var ajaxWrapper = (function() {
var id = 0, calls = {};
return {
makeRequest: function() {
$.post.apply($, arguments); // for example
calls[id] = true;
return id++;
},
finishRequest: function(id) {
delete calls[id];
},
isAllDone: function(){
var prop;
for(prop in calls) {
if(calls.hasOwnProperty(prop)) {return false;}
}
return true;
}
};
})();
사용법 :
를 당신은 당신이,541에 전화를 추가 할 수 있습니다 더 정교하고 싶었다면
대신 $.post("url", ... function(){ /*success*/ } ...);
의 우리는
var requestId;
requestId = ajaxWrapper.makeRequest("url", ...
function(){ /*success*/ ajaxWrapper.finishRequest(requestId); } ...);
을 다하겠습니다 사용이 거의 완전히 투명하게 될 것이다자신이 래퍼 내부 : 그래서,
이 프로그램을 작성할 수있는 방법의 톤,하지만 잘 작동하는 카운터를 사용하여 간단한 기술이있다
ajaxWrapper.makeRequest("url", ... function(){ /*success*/ } ...);
이것은 적어도 고려해야 할 사항입니다. http : //www.benjiegillam.co.kr/2011/11/multiple-asynchronous-callbacks/ –