7 回答

TA貢獻1859條經驗 獲得超6個贊
第一步,初始化p1
打印 1
第二步,初始化p2
打印 3
第三步,執行p1
的then
方法
打印 2
補充說明:
修改上面最后一步:
第四步:執行p2
的then
方法,在此方法中又調用p1
,此時,p1已經處于resolved狀態,所以返回2
.
打印 2
.
Promise對象是瀏覽器打印出來,node中執行并沒有。詳細解決請參考@toBeTheLight 的回答。

TA貢獻1815條經驗 獲得超6個贊
js的事件循環機制可以看這個瀏覽器和Node不同的事件循環(Event Loop)
剩下的就是resolve(promise)和resolve(1)
的問題了。
瀏覽器比node會多輸出一個promise對象,你可以把它理解為整個代碼塊的返回值
,它應該是最后一個語句的.then
的返回值。具體解釋見另一個答案下的評論。

TA貢獻1802條經驗 獲得超6個贊
其實有兩個棧
開始執行主棧,p1執行,輸出1,resolve的后面的then放在次棧中
p2執行,輸出3,,resolve的后面的then放在次棧中
主棧里的執行完后,再去順序執行次棧里的
這兩個棧其實有專有名詞的,忘了叫啥了

TA貢獻1817條經驗 獲得超14個贊
p1和p2的new操作是在js主線程上執行,按照先后順序同步的方式執行你傳給promise的函數,而promise實例p1和p2中then方法注冊的回調任務是異步執行的,所以先輸出1和3。而又因為p2必須等p1 resolve之后才能執行then邏輯,所以一定是先輸出p1的2,等p1 resolve之后,p2才會resolve,然后執行p2的then邏輯在輸出一個2.

TA貢獻1796條經驗 獲得超4個贊
添加回答
舉報