我找不到這個問題的解決方案:
如果你想在 codepen 或其他人身上測驗你的問題,我給你一個小例子:
您需要一個用于測驗和 JS 代碼的 html 中的輸入型別復選框:
const array = []
for (let i = 0; i < 10000000; i ) array.push(i)
console.log(array.length)
其實我的問題是,在執行這段代碼的程序中,如果我點擊輸入,只會在for執行結束時檢查。
(這對于客戶渲染來說是非常不愉快的)
我知道在計算完成時可以不阻止該站點,但是如何呢?
如果您有解決方案,我很感興趣,甚至是軌道。謝謝 !
uj5u.com熱心網友回復:
一種方法是使用某種異步模式來不阻塞事件回圈太久。例如,像這樣創建一個異步迭代器:
async function doAsyncNTimes(n, process) {
return new Promise(resolve=>{
function helper(index) {
if (index >= n) {
resolve();
return;
}
process(index);
setTimeout(()=>{
helper(index 1);
}
)
}
let index = 0;
helper(index);
});
}
array = [];
doAsyncNTimes(10000, (index)=>{
array.push(index);
}
).then((ret)=>{
console.log(array)
});
這樣,您只會在一次迭代運行時阻塞事件回圈,然后盡快調度下一次迭代。如果需要,您甚至可以進行process異步,如果計算量很大,那將是有益的。處理數百萬個專案需要一些時間,但 UI 完全不會被阻塞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/456878.html
標籤:javascript for循环 异步等待
