課程地址:https://www.imooc.com/learn/949git
未來的狀態github
錯誤1:入棧出棧,先後兩個函數不在同一個棧。異步回調的過程當中沒有辦法是由try...catchpromise
錯誤2:前面聲明的變量不只能被外面函數使用,也能被別的函數使用修改,違背關注點統一的原則異步
總結:異步回調函數會在一個新的棧裏運行,因此在這個棧是沒辦法獲取以前棧的信息的,以前拋出的信息的,異步回調的時候沒有辦法像之前那樣try...catch處理錯誤;沒有辦法判斷這些文件何時處理完成,因此在高級做用域鏈-外層聲明不少變量,內層去使用,致使被其餘修改函數
若是隻有一個異步回調使用promise是沒有意義的,只有在多個連續的異步回調裏,promise纔有意義測試
start——1秒以後輸出the promise fulfilled——2秒以後刷出hello,worldspa
在任何地方生成一個promise隊列,能夠把它做爲變量傳遞到其餘地方.net
若是操做是一個很明顯的隊列(先進先出),能夠在後面追敘then3d
無論前面狀態是否是完成了,都會按照順序完成。若是完成了,後面返回的then也會獲得前面promise返回的值隊列
這三個是同時輸出
then沒有等到裏面的promise返回的實例,直接執行了下一個then,可是這個then裏面當即執行裏的promise裏的定時器又會在2s以後執行
在promise實例裏若是不直接返回promise實例,他就會直接執行下一個,即時裏面返回了false,也不影響下一步,由於false會直接傳遞到下面
沒有明確返回值,至關於返回undefind。
整個進程仍然是等到完成纔會執行
展開裏面的then。執行效果同樣,看起來更清晰
假設dosomething和dosomethingelse都返回promise實例
第二種:當then也發生錯誤,catch也能夠捕獲
catch也會返回promise實例,而且其中沒有拋出錯誤的話,他返回的實例也是fulfilled的狀態
變化後,跳過2個then,到下一個catch
prommise的狀態只能由執行器裏面改變,不能由外界改變
將來版本會提升reject的權重,會終止這段代碼的執行
P2輸出後,進程並無執行完,進程須要等待P1執行完才能完
jQuery3.0及以後版本支持完整promise規範,以前和標準規範有些詫異
IE8-11都不支持promise,IE edge支持
源碼:https://github.com/merrier/imooc-promise-sample
完