Promise的作用
- ES6之前:非同步操作通常採用:回撥函式和事件監聽的方式,再處理Ajax請求的時候,通常要巢狀多層回撥函式,很難理清,又叫做回撥地獄;
- Promise的出現就是為了解決回撥地獄的問題,讓結構更清晰;
語法
- 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物件,所以可以鏈式操作,解決回撥地獄問題 複製程式碼
- 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,就返回; 複製程式碼