JS 在单线程上玩的越来越6,不禁产生这样的思考,如何将同步循环转换成异步循环。在单线程中,异步循环还是很有必要的,如果同步数据量过大,会造成浏览器卡死。
递归
JS 的异步无非那几个 api,我以 settimeout 为例,套一个函数使用递归即可:
const arr = [1,2,3,4,5,6,7]
let count =0
const go= ()=>{
if(count < arr.length){
setTimeout(() => {
console.log(arr[count])
count = count+1
go()
}, 1000);
}
}
go()
利用死循环 api
死循环 api 比如 idleCallback 之类:
const arr = [1,2,3,4,5,6,7]
let count =0
const go = (deadline)=>{
while ((deadline.timeRemaining() > 0 || deadline.timeout) && count < arr.length) {
console.log(arr[count])
count = count + 1
}
}
window.requestIdleCallback(go, { timeout: 1000 })
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
请登录后查看评论内容