Заметил, что 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>