SOURCE

function sleep (duration=20) {
    let start = Date.now() 
    console.log('sleep',start + duration > Date.now())
    while(start + duration > Date.now() ) {

    }
}
const works = [
    () =>{
        console.log('A开始')
        sleep()
        console.log('A结束')
    },
    () =>{
        console.log('B开始')
        sleep()
        console.log('B结束')
    },
    () =>{
        console.log('C开始')
        sleep()
        console.log('C结束')
    },
    () =>{
        console.log('D开始')
        sleep()
        console.log('D结束')
    },
    () =>{
        console.log('E开始')
        sleep()
        console.log('E结束')
    },
]

requestIdleCallback(workLoop)

function workLoop (deadline) {
    console.log(36,deadline , deadline.timeRemaining() , deadline.didTimeout )
    while(deadline.timeRemaining() > 3 && works.length > 0) {
        performUnitOfWork()
    }
    if(works.length > 0) {
        console.log('下一帧从这里开始................')
        requestIdleCallback(workLoop)
    }
}

function performUnitOfWork () {
    let work = works.shift() 
    work()
}
console 命令行工具 X clear

                    
>
console