Дата публикации:

Пауза в JavaScript, синхронный код и ожидание событий.


Какой противный этот JavaScript оказался, от слова "совсем". Как специально в JavaScript нет синхронной паузы. Асинхронный setTimer в некоторых случаях абсолютно бесполезен. А я ожидал что в JAVASCRIPT будет просто : delay(2000) но увы. Как сейчас весь православный мир делает паузы ? Короче делают это 3 способыми: высчитыванием времени через объект Даты и пускания пустого цикла (вешая страницу вдребезги напополам) Промисами + setTimeout, получая в загашник Калбэк хелл async/await + setTimeout, получая более менее что-то хоть как-то поддающееся логике, но костыль он и есть костыль Статей по данной теме полно, но вот как выглядит трушный пример: function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function delayedGreeting() { console.log("Hello"); await sleep(2000); console.log("World!"); await sleep(2000); console.log("Goodbye!"); } delayedGreeting(); Мы получили синхронный код, где каждая строка выполняется после окончания предидущей.. Вот бы поржал Билл когда они писали GWBasic и узнали что сейчас творится в ТОПовом языке земного шара. Конечно же это позор когда код надо делать синхронным, асинхронными методами. А что если нам надо получить синхронное управление в следующую функцию из предидущей, но только когда в предидущей произойдет асинхронное событие, например onend ? т.е. нам надо ждать не 10 секунд а неизвестно сколько и не из ретюрна, а из черте какого события. Тут на помощь приходят глобальные переменные, где по окончании события мы выставляет флаг в объекте window.myOnEnd = 1 А наша пауза превращается в цикл ожидания с интервалом в 100мс например. function start() { do("Hello!") waitEnd() do("Привет") waitEnd() do("we walking around") } async function waitEnd(){ while(window.end==0) {await sleep(100)} } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } и только тогда уже мы видим нормальный синхронный код с ожиданием событий. И наш код стает красивым и добрым, а его поддержка приятной и ясной как день.

Telegram канал о биржах ссылок
Видеочат рулетка