Заметил, что JavaScript работает как-то ассинхронно, и иногда выходит из тела функции, и не хочет возвращать значение. Допустим если написать что-то в таком духе, я значение "1" не дождусь, но вылезит пустой alert, ну или браузер может заморозиться:
function set_items() {
var el = document.getElementById('div_inner');
for(var i=0; i<5000; i++) {
el.innerHTML += '<div>'+ i + '</div>';
}
return 1;
}
window.onload = () => {
alert(set_items());
}
Сделал типа такого, вроде работает:
function set_items(cb) {
var el = document.getElementById('div_inner');
for(var i=0; i<5000; i++) {
el.innerHTML += '<div>'+ i + '</div>';
}
cb(1);
}
window.onload = () => {
set_items(function(i) { alert(i); } );
}
А теперь давайте попробуем это переписать, но спомощью промисов, тут работает так, поставил обработчик, код дальше выполняется, когда дождётся, сработает await:
<html>
<head>
<script>
async function set_items() {
var promise = new Promise((resolve, reject) => {
var el = document.getElementById('div_inner');
for(var i=0; i<5000; i++) el.innerHTML += '<div>'+ i + '</div>';
resolve(1);
});
var result = await promise;
alert(result);
}
window.onload = () => {
set_item();
}
</script>
</head>
<body>
<div id="div_inner"></div>
</body>
</html>