1. 程式人生 > >到底什麽是promise?有什麽用promise怎麽用

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

了解 快速 回調 捕獲 幫助 alt 約定 jquer 不能

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

【掃盲】

什麽是promise?

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

promise有什麽用?

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

【案例】

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

技術分享圖片

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

當有兩層時:

技術分享圖片

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

技術分享圖片

問題1:維護困難

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

問題2:重復錯誤處理

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

問題3:並行處理

如果以上異步操作突然要改成並行處理,並且要捕獲到全部處理完事件,那麽就要把代碼拉平,還要給計數器來判斷異步是否全部返回

【解決方案】

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

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

技術分享圖片

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

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

技術分享圖片

then分支可以返回promise也可以返回數據:

技術分享圖片

並行的情況:

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

技術分享圖片

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

這就實現了並行處理

這是promise的基本用法,更多功能待大家自己研究

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