Показать сообщение отдельно
  #1 (permalink)  
Старый 17.08.2011, 08:55
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

setTimeout/setInterval - неожиданное поведение
Всем доброго времени суток...
IE8\HTML+JS+ActiveX ; Страничка с согласия юзверя работает через объекты ActiveX c MS Excel и файловой системой, а пока она это делает, я хотел бы показывать некую анимацию, пусть банально менять текст в <textarea>...
Вычитав, что о многопоточности говорить не приходится, начал копать в сторону асинхронности, и вот я "раскуриваю" setTimeout/setInterval реф которых утверждает что они предназначены для асинхронного вызова функций, казалось бы "то что надо!", а нет... или я не уловил суть (хотя с асинхронностью знаком не по наслышке на серверном Node.js)
так вот...
пуcть в теле документа имеем некую функцию myStatusBar() , она у нас занимается некой анимацией (добавляет точку к <textarea>*.value) -
setInterval(function(){myStatusBar();},500);

далее собственно запускаем наш тяжеловесный процесс работы с Excel и файловой системой назовем его myHeavyProcess()(это или последовательный вызов нескольких функций, или вызов одной, которая сама вызывает все последующие //PS: в средем 5-6 сек.)
вот что у нас вышло
setInterval(function(){myStatusBar();},500);
myHeavyProcess();

что ожидалось: функция myStatusBar() будет выполняться каждые 0,5 сек. в то время как будет выполняться myHeavyProcess()
что вышло: функция myStatusBar() выполнится один раз, потом будет "шурупить" myHeavyProcess() все свои 5-6 сек. без какой либо анимации, и как только она закончит опять выполнится myStatusBar()...

Ну и какая-же это асинхронность ?

Последний раз редактировалось RUVATA, 17.08.2011 в 08:59.
Ответить с цитированием