2010년 01월 05일
JavaScript에서 '동기화' -_-
jQuery의 each와 post를 쓰는데 한가지 문제점이 발생했다.
function testAjax(){
var i=0;
$('.test').each(function(i){
$.post('test.php'.{mode:'test'},function(data){
if(data=='SUCCESS') i++;
});
});
alert(i);
}
요런식으로 each와 post가 중첩되어 있는 코드였는데,
저 맨 아랫줄의 i는 ajax로 돌아온 값이 SUCCESS더라도 '거의 항상' 0이 된다는게 문제다 -_-;
아마 저 function들 중(post나 each)에서 어떤 녀석이 setTimeOut을 통해서 돌리는게 있다는 건데,
우선 저 each로 돌려야 할 갯수가 몇개인진 분명히 알 수 있는 상태였으므로
function testAjax(count){
var i=0;
$('.test').each(function(i){
$.post('test.php'.{mode:'test'},function(data){
count--;
if(data=='SUCCESS') i++;
});
});
while(true){
if(count==0)break;
}
alert(i);
}
이렇게 만들어 보았으나,
JavaScript는 멀티 스레드 체제가 아니었으므로 -_-
count--; 가 실행될 가능성은 0[...]
[애초에 sleep조차 없는 while문이 스핀락이 될 수 있는가도 의문이지만]
따라서 이렇게 해결했다.
function testAjax(count){
var i=0;
$('.test').each(function(i){
$.post('test.php'.{mode:'test'},function(data){
count--;
if(data=='SUCCESS') i++;
});
});
var interval=setInterval(function(){
if(count==0){
clearInterval(interval);
alert(i);
}
},100);
}
-_-;; 뭐야 이게
function testAjax(){
var i=0;
$('.test').each(function(i){
$.post('test.php'.{mode:'test'},function(data){
if(data=='SUCCESS') i++;
});
});
alert(i);
}
요런식으로 each와 post가 중첩되어 있는 코드였는데,
저 맨 아랫줄의 i는 ajax로 돌아온 값이 SUCCESS더라도 '거의 항상' 0이 된다는게 문제다 -_-;
아마 저 function들 중(post나 each)에서 어떤 녀석이 setTimeOut을 통해서 돌리는게 있다는 건데,
우선 저 each로 돌려야 할 갯수가 몇개인진 분명히 알 수 있는 상태였으므로
function testAjax(count){
var i=0;
$('.test').each(function(i){
$.post('test.php'.{mode:'test'},function(data){
count--;
if(data=='SUCCESS') i++;
});
});
while(true){
if(count==0)break;
}
alert(i);
}
이렇게 만들어 보았으나,
JavaScript는 멀티 스레드 체제가 아니었으므로 -_-
count--; 가 실행될 가능성은 0[...]
[애초에 sleep조차 없는 while문이 스핀락이 될 수 있는가도 의문이지만]
따라서 이렇게 해결했다.
function testAjax(count){
var i=0;
$('.test').each(function(i){
$.post('test.php'.{mode:'test'},function(data){
count--;
if(data=='SUCCESS') i++;
});
});
var interval=setInterval(function(){
if(count==0){
clearInterval(interval);
alert(i);
}
},100);
}
-_-;; 뭐야 이게
# by | 2010/01/05 05:26 | 컴질 - 프로그래밍 | 트랙백 | 덧글(4)



