到底什麼是promise?有什麼用promise怎麼用

相信不少人剛接觸promise都會暈,但學會後卻離不開它,本文詳細介紹一下promise,promise解決的問題,幫助新手快速上手html

【掃盲】node

什麼是promise?設計模式

promise是一種約定,並不是一種技術,像設計模式同樣,跟語言無關、框架無關。js裏面實現promise的框架有不少,如:Q、jQuery等。promise

promise有什麼用?框架

它主要是爲了解決js異步回調時業務太亂,尤爲嵌套異步時,代碼也很醜,維護性也差,錯誤處理也不能統一這些問題。所以目前也只有js語言會使用promise異步

 

【案例】spa

傳統JS異步請求是這樣的:設計

這是一個標準的異步處理方法(回調類型)3d

當有兩層時:htm

這時代碼就有些難讀了,固然平時在使用中大多數是超過兩層的:

問題1:維護困難

當出現多層的時候,代碼已經亂的看不下去了,若是業務再複雜一點幾乎無法維護了,這個時候若是需求變動,須要更換異步請求的調用順序,若是遇到這樣的代碼,簡直要崩潰

問題2:重複錯誤處理

另外裏面寫了多處錯誤處理的代碼,每個回調都要處理一次錯誤,顯然代碼太臃腫,還容易出錯。

問題3:並行處理

若是以上異步操做忽然要改爲並行處理,而且要捕獲到所有處理完事件,那麼就要把代碼拉平,還要給計數器來判斷異步是否所有返回

 

【解決方案】

看看promise是怎麼優雅的解決以上問題的

假設a、b、c、d4個方法都返回promise對象,以上代碼將會變爲:

這時代碼由橫向變成了縱向,好看不少。並且錯誤統一在最後面處理(任何一個分支出錯都會走catch)很是方便

另外若是上一個then返回了數據,下一個then會接收到上一個then返回的數據,如:

 

 then分支能夠返回promise也能夠返回數據:

 

並行的狀況:

如須要並行處理須要用all方法:

 

 

這是的Promise是指實現Promise的框架,若是用的Q就是Q.all,原生的是Promise.all

這就實現了並行處理

 

這是promise的基本用法,更多功能待你們本身研究

 

關於nodeJS中Q的用法能夠查看個人另外一篇文章:

http://www.javashuo.com/article/p-zxtlvrua-be.html

相關文章
相關標籤/搜索