현재 동기가 필요한 Ajax 호출이 있습니다. 그러나이 Ajax 호출이 실행되는 동안 호출이 반환 될 때까지 브라우저 인터페이스가 멈 춥니 다. 시간 초과가 발생하면 브라우저가 동결되어 significant period of time이됩니다.자바 스크립트 루프에있는 동안 브라우저 창을 업데이트 할 수 있습니까?
브라우저 (모든 브라우저)가 사용자 인터페이스를 새로 고칠 수 있지만 자바 스크립트를 실행하지 못하게 할 방법이 있습니까? 이상적으로는 window.update()
과 같은 명령을 사용하면 사용자 인터페이스 스레드를 새로 고칠 수 있습니다. 이 가능할 것이다 경우
, 그때는 같은과 동기 AJAX 호출을 대체 할 수 :
obj = do_async_ajax_call();
while (!obj.hasReturned()) {
window.update();
}
// synchronous call can resume
내가 setTimeout
를 사용하거나 콜백 기능을 다시 시작할 수 없습니다 이유 그입니다 (모두가 서로에 따라 너무 많은 상태 변수가, 그리고 long_function()
흐름 그렇지 않으면 어떻게 든 재개 할 것) : 실행 흐름이 중단 될 수 없다
function long_function() {
// lots of code, reads/writes variable 'a', 'b', ...
if (sync_call_is_true()) {
// lots of code, reads/writes variable 'a', 'b', ...
} else {
// lots of code, reads/writes variable 'a', 'b', ...
}
// lots of code, reads/writes variable 'a', 'b', ...
return calculated_value;
}
왜 호출이 동기되어야합니까? –
전체 전화 코드를 게시 할 수 있습니까? 이것은 아마도 단순화 될 수 있으며 XHR 함수를 사용하여 필요한 것을 지원할 수 있습니다 (jQuery가 옵션이 아니라면 더 깨끗합니다). 어느 쪽도 옵션이 아니면 함수의 이름을'do_sync_jax_call(); '로 바꾼다. –