ES6 - Promise

貓董發表於2018-12-18

Promise的作用

  1. ES6之前:非同步操作通常採用:回撥函式和事件監聽的方式,再處理Ajax請求的時候,通常要巢狀多層回撥函式,很難理清,又叫做回撥地獄;
  2. Promise的出現就是為了解決回撥地獄的問題,讓結構更清晰;

語法

  1. new Promise()物件, 以及.then()方法:
    let p1 = new Promise(function(resolve,reject){
        resolve();//成功時呼叫
        reject(); //失敗時呼叫
    })
    p1.then(res=>{console.log(res)}, rej=>{console.log(err)});
    //通常會把第二個引數rej,放到catch裡面去處理
    p1.then(res=>{console.log(res)}).catch(err=>{console.log(err)});
    //.then 返回promise物件,所以可以鏈式操作,解決回撥地獄問題
    複製程式碼
  2. Promise 的其他方法:
    let p1 = Promise.resolve('res'); //轉成一個promise物件,狀態為resolve;
    let p2 = Promise.reject('err'); //轉成一個promise物件,狀態為reject;
    let pArr1 = Promise.all([p1,p2,p3]);
    //打包多個promise物件到陣列,但仍是promise物件可以用.then();
    //必須確保所有promise物件都為resolve才回返回
    let pArr2 = Promise.race([p1,p2,p3]);
    //只要有一個是resolve,就返回;
    複製程式碼

相關文章