1. 程式人生 > 實用技巧 >Promise非同步處理物件

Promise非同步處理物件

Promise函式物件的執行機制

(一)、在peomise中有三種狀態:pending初始狀態、fulfilled成功狀態、rejected失敗狀態當在這個函式內部呼叫resolve()方法時狀態會從pending切換為fulfilled狀態,並且後續一直為這個狀態,當呼叫reject()方法時狀態由pendung切換為rejected狀態,在函式內部狀態會自己識別並進行呼叫。以下程式碼示例:

let promise = new Promise((resolve,reject)=>{
   resolve("data");//呼叫這個狀態切換為成功
   reject("err");//呼叫這個狀態切換為失敗
});
獲取promise返回的狀態值
格式1:
promise.then((data)=>{
  data為resolve內部返回的資料(resolve返回的資料)   
},(err)=>{
  err為內部失敗返回的資料(reject返回的資料)
});   
格式2:
promise.then((data)=>{
  data為resolve內部返回的資料(resolve返回的資料)   
}).catch((err)=>{
   err為內部失敗返回的資料(reject返回的資料)
});

(二)、async函式
async是promise和generator的語法糖,在用async修飾的函式內部不管有無return返回的都為promise物件且返回的是resolve內的資料,如果有return那麼return返回的內容會成為resolve裡面的引數。在async修飾的函式內部會有一個等待接收非同步操作的屬性await,以下為例項:

async function fn(){
    await "非同步程式碼(promise函式)";
    await promise;  // data
    await接收到的資料為promise函式中resolve的引數值;預設只能接收resolve的值如果想要接收reject的值則需要使用如下程式碼:
    
    try{
       await promise;
    }catch(err){
       console.log(err);為異常程式碼
    }

使用async修飾的函式裡面可以呼叫多個await來接收非同步程式碼