1. 程式人生 > >對於promise的理解

對於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.能更好的捕獲錯誤。