JavaScript 中 Promise 高階面試題求問
粉丝福利 : 关注VUE中文社区公众号,回复视频领取粉丝福利
問題:
new Promise((resolve) => {
console.log(1)
resolve()
}).then(async () => {
console.log(2)
}).then(async () => {
console.log(3)
})
new Promise((resolve) => {
console.log('a')
resolve()
}).then(() => {
console.log('b')
}).then(() => {
console.log('c')
}).then(() => {
console.log('d')
}).then(() => {
console.log('e')
})
正解:
1 a 2 b c d 3 e
求問思路,我自己的答案應該是 1 a 2 b 3 c d e,就是 then 之後的我覺得都會放入 microtask
爬了很多篇文作了以下筆記,但還是不知道這題為何這樣?
- 已知的是 async 如果沒有接 await 還是會回傳 Promise 物件
- .then 中沒有回傳值的話,還是會回傳 Promise 物件 return new Promise.resolve()
- .then 後的內容會被放入 microtask
- 會先在 task 處理完同步的,再以先進先出的方式將 microtask 任務取出執行
- Promise 的狀態只能改一次改成 resolved 或者 rejected,前者可執行 then 後者 catch
- Promise 在 resolve/reject 前的內容是同步的
- 本題貌似沒有出現會被放入 macrotask 的