У меня есть вызов Ajax, который в настоящее время должен быть синхронным.Однако во время выполнения этого вызова Ajax интерфейс браузера останавливается до тех пор, пока вызов не вернется.В случаях таймаута это может заморозить браузер на значительный период времени .
. Есть ли способ заставить браузер (любой браузер) обновить пользовательский интерфейс, но не выполнитькакой-нибудь Javascript?В идеале это была бы какая-то команда типа 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;
}