到底什麽是promise?有什麽用promise怎麽用
相信很多人剛接觸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怎麽用