Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Показать загрузку пока выполняется код JS через промис (https://javascript.ru/forum/misc/83596-pokazat-zagruzku-poka-vypolnyaetsya-kod-js-cherez-promis.html)

lysenkora 20.01.2022 08:52

Показать загрузку пока выполняется код JS через промис
 
Добрый день!

Необходимо сделать, так чтобы пока выполняется JS код, пользователю показывалась гифка загрузки, после выполнения JS кода - загрузка скрывалась и показывались данные. Всё это пытаюсь реализовать через промис. Вот код:

function f_my(data){
	document.getElementById('div_loader_div_dannie').style.display = 'block';
	
	let promise = new Promise(function(resolve, reject){
		let dannie = '';
		
		for (j=0; j<100; j ++){
			for (i = 0; i < 100; i ++){
				dannie += '<div style="width:100%; height:50px; background:red; margin-bottom:10px; float:left;"></div>';
			}
		}

		resolve(dannie)
	});
	
	promise.then(result => f_obr(result));
}

function f_obr(result){
	document.getElementById('div_dannie').innerHTML = result;
	document.getElementById('div_loader_div_dannie').style.display = 'none';
}


Но при выполнении получаю длительно зависшую страницу, без соответствующего отображения gif загрузки. Прошу помочь с решением проблемы!

Aetae 20.01.2022 10:44

Тут все операции синхронные*, т.е. показ загрузки, рисование и скрытие загрузки происходят единомоментно. Возможно с некоторым подвисанием от того, что ты пытаешься нарисовать 10000 float элементов.

Добавление промиса не сделает магическим образом твой код асинхронным.

* then сработает в следующем таске, но на деле это ничего не меняет.


Часовой пояс GMT +3, время: 03:35.