亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

阿里二面的一道筆試題,不太明白原理

阿里二面的一道筆試題,不太明白原理

拉風的咖菲貓 2019-03-12 21:23:31
var p1=new Promise(resolve => {    console.log(1)    resolve(2)})var p2=new Promise(resolve => {    console.log(3)    resolve(p1)})p1.then(re => {    console.log(re)    })p2.then(re => {    console.log(re)})
查看完整描述

7 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

第一步,初始化p1
打印 1
第二步,初始化p2
打印 3
第三步,執行p1then方法
打印 2

補充說明:
修改上面最后一步:
第四步:執行p2then方法,在此方法中又調用p1,此時,p1已經處于resolved狀態,所以返回2.
打印 2.

Promise對象是瀏覽器打印出來,node中執行并沒有。詳細解決請參考@toBeTheLight 的回答。

https://img1.sycdn.imooc.com//5c947db500015cfa05390505.jpg

查看完整回答
反對 回復 2019-03-22
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

js的事件循環機制可以看這個瀏覽器和Node不同的事件循環(Event Loop)
剩下的就是resolve(promise)和resolve(1)的問題了。


瀏覽器比node會多輸出一個promise對象,你可以把它理解為整個代碼塊的返回值,它應該是最后一個語句的.then的返回值。具體解釋見另一個答案下的評論。


查看完整回答
反對 回復 2019-03-22
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

其實有兩個棧
開始執行主棧,p1執行,輸出1,resolve的后面的then放在次棧中
p2執行,輸出3,,resolve的后面的then放在次棧中
主棧里的執行完后,再去順序執行次棧里的

這兩個棧其實有專有名詞的,忘了叫啥了


查看完整回答
反對 回復 2019-03-22
?
大話西游666

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.

查看完整回答
反對 回復 2019-03-22
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

promise一旦創建就會執行,所以1,3肯定先打印出來,其他的就不用多說了??梢钥匆幌氯钜环謇蠋煹年P于ES6的講解,比較詳細,一語難以概括的。希望對你有幫助哇。


查看完整回答
反對 回復 2019-03-22
  • 7 回答
  • 0 關注
  • 773 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號