7 回答

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

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

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

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

TA貢獻1796條經(jīng)驗 獲得超4個贊
添加回答
舉報