對於promise的理解
一、首先,Promise 是一個建構函式,對回撥函式的一種封裝,對非同步程式設計的一種改進,用同步的方式表達出來。可以說Promise是ajax的執行狀態管理工具,它還應用到Vue裡的fetch等方面。該建構函式身上有兩個方法:Promise.all(),和Promise.race()。
其實,我們應用的重點是:new出來的promise物件。它有三種狀態:pending(進行中),resolved(已完成),rejected(已失敗),狀態一旦發生,就不能改變。執行new的時候狀態就開始變化。promise物件身上有兩個方法:then(),和catch()。
語法: var oP =new Promise(function(resolve,reject){
reject(data); || resolve(data);
}) ;
oP.then(function(data){ }, function(data){ }) //第一引數是在oP狀態為resolved時執行。第二引數是在oP狀態為rejected時執行(也叫錯誤捕獲)。
oP.catch( function(data){ })。 //捕獲錯誤,出錯時不捕獲錯誤會報錯。
oP.then(function(data){ }).then(function(data){ }) //then()還可以傳遞,但是資料data不會傳遞(即第二個data為undefined)。
oP.then(function(data){ }, function(data){ }).catch( function(data){ }) //catch不會傳遞執行錯誤,只會執行一次(即這裡的catch不會執行)。
所以,我們在遇到回撥函式層層巢狀時,就可以將函式返回一個promise物件。利用 then方法+catch方法 來處理。
二、使用promise的好處是:
1.程式碼結構更加扁平且更可讀,清晰明瞭。
2.能解決回撥地獄問題。
3.可將資料請求和業務邏輯分離開來。
4.便於管理維護。
5.能更好的捕獲錯誤。