Javascript 微任务是否保证在它们排队的同一动画帧内触发?

Javascript 微任务是否保证在它们排队的同一动画帧内触发?,javascript,asynchronous,task,requestanimationframe,Javascript,Asynchronous,Task,Requestanimationframe,例如,承诺使用微任务,我验证了它们可以在动画帧结束之前填满(在Chrome中)。我说的是用requestAnimationFrame制作的帧 我想知道我们有什么保证,因为微任务将在同一动画帧内启动,在微任务排队的一些逻辑之后,在动画帧结束之前(例如,在动画帧内解析承诺时) 如果有某种程度的保证,那么我相信这是一个解决问题的答案。这甚至可能是同一个问题(间接地)。似乎是这样 试一试 你会得到 585838.7970909999 rAF promise 585838.7970909999 rAF p

例如,承诺使用微任务,我验证了它们可以在动画帧结束之前填满(在Chrome中)。我说的是用
requestAnimationFrame
制作的帧

我想知道我们有什么保证,因为微任务将在同一动画帧内启动,在微任务排队的一些逻辑之后,在动画帧结束之前(例如,在动画帧内解析承诺时)

如果有某种程度的保证,那么我相信这是一个解决问题的答案。这甚至可能是同一个问题(间接地)。

似乎是这样

试一试

你会得到

585838.7970909999 rAF
promise
585838.7970909999 rAF
promise

事实证明,即时微任务(f.e.Promise.resolve())总是在启动它们的宏任务之后立即启动,如果这些微任务启动更多的微任务,那么这些新任务就会在当前微任务之后立即启动。因此,可以创建一个微任务无限循环,将CPU锁定在100%,因此不会触发其他宏任务代码(例如,另一个动画帧或超时)。我们几乎可以把它看作是同步代码,它被重新排序到当前执行的同步代码的末尾。
585838.7970909999 rAF
promise
585838.7970909999 rAF
promise