var p2 = new Promise(resolve => {
setTimeout(() => {
resolve()
}, 2000)
})var p1 = new Promise(resolve => {
resolve(p2)
})
p1.then(data => { console.log('p1')
})
p2.then(data => { console.log('p2') console.log('p1 status ', p1) // 這里在瀏覽器輸出的是 pending 狀態
Promise.resolve().then(() => { console.log('here') // 然后這里會優先于 p1.then() 輸出
})
})請問一下,p1 的狀態到底什么時候才會改變呢?為什么執行到 console.log('p1 status ', p1) 時候,p1 的狀態是 pending 呢?萬分感謝~
1 回答

慕少森
TA貢獻2019條經驗 獲得超9個贊
Promise里提供的resolve、reject參數是異步的,所以會晚于同步代碼。
如果resolve函數里的參數是一個Promise實例,那么會等待這個實例的狀態改變后才會改變狀態。所以p1.then里的函數最后執行,因為p1的狀態要等p2的狀態確定后才能改變,所以執行到 console.log('p1 status ', p1)
時候,p1 還沒有改變狀態。
不好理解的話,我之前寫了個Promise實現,你對比著上面的話看下。學習并實現一個Promise
添加回答
舉報
0/150
提交
取消