Синхронная задержка в JS

Синхронная задержка в JS

В некоторых случаях метод задержки выполнения кода setTimeout() не подходит т.к. код в нём выполняется асинхронно. Например случай, когда требуется передать данные аналитики в CRM по клику на ссылку.

<a href="/basket/" onclick="return send_analitics();">Перейти в корзину</a>

<script>
function send_analitics(){
	/* Код аналитики */
	/* ... */

	return true;
}
</script>
HTML

В данном случаи код аналитики может не сработать, т.к. пользователь уже перейдет на другую страницу, поэтому нужно добавить задержку:

<a href="/basket/" onclick="return send_analitics();">Перейти в корзину</a>

<script>
function sleep(milliseconds) {
	var t = (new Date()).getTime();
	var i = 0;
	while (((new Date()).getTime() - t) < milliseconds) {
		i++;
	}
}

function send_analitics(){
	/* Код аналитики */
	/* ... */

	sleep(500);
	return true;
}
</script>
HTML
23.09.2020
470

Комментарии

, чтобы добавить комментарий.

Другие публикации

Contenteditable – текстовый редактор
Если добавить атрибут contenteditable к элементу, его содержимое становится доступно для редактирования пользователю, а...
13446
+17
Получить фото из Instagram без API
Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и...
14204
+5
Примеры отправки AJAX JQuery
AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать контент и т.д. А функции JQuery значительно упрощают работу.
75168
+11
Работа с cookie в JavaScript
Сookies или куки – это данные в виде пар ключ=значение, которые хранятся в файлах на компьютере пользователя. Для хранимых данных существуют несколько ограничений...
2294
+2
Как дописать стили в атрибут style тегов HTML через PHP
Данный вопрос возникает при верстке писем т.к. стили прописанные в head в почтовых сервисах и программах не работают, а...
8575
+2
Подключение к платежной системе Сбербанка
После регистрации в системе эквайринга Сбербанка и получив доступ к тестовой среде, можно приступить к интеграции с...
27606
+16