-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
day-17-异步代码执行顺序+ #17
Comments
|
宏任务: setTimeout,setInterval,setImmediate,I/O(磁盘读写或网络通信),UI交互事件
同一次事件循环中,微任务永远在宏任务之前执行。 |
根据前文资料,我们可以看到这段代码中有这各种宏任务和微任务 // a
setTimeout(() => {
// e
console.log(4)
// f
Promise.resolve(8).then(v => {
console.log(v)
}).then(() => {
// g
console.log(9)
})
}, 0)
// b
setTimeout(() => {
// h
console.log(10)
Promise.resolve(11).then(v => {
// i
console.log(v)
}).then(() => {
// j
console.log(12)
})
}, 0)
// c
new Promise(resolve => {
// k
console.log(1)
for (var i = 0; i < 10000; i++) {
i == 9999 && resolve()
}
// l
console.log(2)
}).then(() => {
// m
console.log(5)
// n
Promise.resolve(7)
.then(v => console.log(v))
}).then(() => {
// o
console.log(6)
})
// d
console.log(3)
//
/*
a b 两部分代码都会被添加到 event loop 中,等到主线程任务完成后再执行,可以先看后面的部分
从 c 开始
c -> k
js 解释器开始执行 k ,打印 1
for 循环结束后,promise 状态变更为 fullfilled
执行 l,打印 2
外部的同步代码开始执行 d,打印 3
then 方法 resolved 的 异步回调函数开始执行 m,打印 5,
n 部分的 promise 对象状态立刻变更为 fullfilled,相应的回调函数开始打印 7
外部 c 的第二个 then 方法开始执行,异步回调函数执行 o,打印 6
此时主线程的任务执行完毕,开始执行 event loop 中 a、b
a 中代码顺序执行,依次打印 4 8 9
b 中代码顺序执行,依次打印 10 11 12
经测试 控制台中打印顺序为 1 2 3 5 7 6 4 8 9 10 11 12
node 环境中为 1 2 3 5 7 6 4 10 8 11 9 12
a、b 部分执行顺序不同应该与不同的 v8 引擎对 task queue microtask 的理解不同
*/ |
以下代码输出的顺序是什么?为什么
The text was updated successfully, but these errors were encountered: