didact
didact copied to clipboard
help: Confused with 'requestIdleCallback(workLoop)'
In Step III: Concurrent Mode, I learn that: requestIdleCallback(func) will call the call back function when the browser is idle. But in workLoop function, that while loop confused me.
function workLoop(deadline) {
let shouldYield = false
while (nextUnitOfWork && !shouldYield) {
nextUnitOfWork = performUnitOfWork(
nextUnitOfWork
)
shouldYield = deadline.timeRemaining() < 1
}
requestIdleCallback(workLoop)
}
My question is: if shoudYield
is false, it means that the browser is busy, so we should stop calling the next unit of work.
But in this while loop, if shoudYield
is false, the loop will continue and do the next unit of work. Why?
if
shoudYield
is false, it means that the browser is busy, so we should stop calling the next unit of work
It's the opposite. shouldYield
means "should stop". If shouldYield
is false it means we should continue performing units of work.
HaHa~, it's my mistake! Here is the doc about the return value.
Returns a DOMHighResTimeStamp, which is a floating-point value providing an estimate of the number of milliseconds remaining in the current idle period.
So deadline.timeRemaining() < 1
means that there is no remaining time to do the work, we should break the while loop and request another callback.
Thank you! Love your amazing project, I will continue learning with it.