Promise非同步處理物件
阿新 • • 發佈:2020-08-21
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來接收非同步程式碼