Promise 入門(推薦)

課程地址:https://www.imooc.com/learn/949git

 1、課程介紹及異步問題

未來的狀態github

錯誤1:入棧出棧,先後兩個函數不在同一個棧。異步回調的過程當中沒有辦法是由try...catchpromise

錯誤2:前面聲明的變量不只能被外面函數使用,也能被別的函數使用修改,違背關注點統一的原則異步

總結:異步回調函數會在一個新的棧裏運行,因此在這個棧是沒辦法獲取以前棧的信息的,以前拋出的信息的,異步回調的時候沒有辦法像之前那樣try...catch處理錯誤;沒有辦法判斷這些文件何時處理完成,因此在高級做用域鏈-外層聲明不少變量,內層去使用,致使被其餘修改函數

2、Promise 入門

若是隻有一個異步回調使用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。

整個進程仍然是等到完成纔會執行

3、小測試

展開裏面的then。執行效果同樣,看起來更清晰

假設dosomething和dosomethingelse都返回promise實例

第二種:當then也發生錯誤,catch也能夠捕獲

catch也會返回promise實例,而且其中沒有拋出錯誤的話,他返回的實例也是fulfilled的狀態

變化後,跳過2個then,到下一個catch

4、Promise 進階

 

prommise的狀態只能由執行器裏面改變,不能由外界改變

將來版本會提升reject的權重,會終止這段代碼的執行

P2輸出後,進程並無執行完,進程須要等待P1執行完才能完

 

jQuery3.0及以後版本支持完整promise規範,以前和標準規範有些詫異

IE8-11都不支持promise,IE edge支持

源碼:https://github.com/merrier/imooc-promise-sample

相關文章
相關標籤/搜索