作者:小赖小燕_380 | 来源:互联网 | 2023-10-10 12:14
requestAnimationFrame 是一个 microtask 还是一个 macrotask
1 2 3 4 5 6 7 8 9 10 11 12
| setTimeout(() => {
console.log('setTimeout')
}, 0)
requestAnimationFrame(() => {
console.log('requestAnimationFrame')
})
new Promise(r => {
console.log('promise')
r()
}).then(() => console.log('then') |
如果是一个 microtask, 那么他应该打印
1
| promise requestAnimationFrame then setTimeout |
如果是一个 macrotask, 那么他应该打印
1
| promise then setTimeout requestAnimationFrame |
但是实际上有两种可能的打印:
1
| promise then requestAnimationFrame setTimeout |
和
1
| promise then setTimeout requestAnimationFrame |
难道是它既不是一个 macrotask 也不是 microtask ,但是浏览器会在下一帧开始的时候把它加入到 microtask 队列的最前方