ES6簡單入門(重點:Promise)
阿新 • • 發佈:2018-11-19
箭頭操作符
ES6中新增的箭頭操作符=>,簡化了函式的書寫,操作符的左邊為輸入的引數,而右邊則是進行操作以及返回的值
/**
* 箭頭操作符
* @type {number[]}
*/
var array = [2,3,1];
//傳統方式
array.forEach(function (v, i, a) {
console.log(v);
});
//Es6寫法
array.forEach(v =>console.log(v));
類的支援
ES6中添加了class關鍵字,JS本身就是面向物件的,提供類的支援後,物件的建立,繼承更加只管了。
增強的物件字面量
- 可以在物件字面量中定義原型
- 定義方法可以省略function
- 直接呼叫父類方法
var human = {
eat(){
console.log("人吃飯");
}
};
var worker = {
__proto__: human,//這裡不能用prototype,因為普通物件沒有構造方法
company:'freelancer',
work(){
console.log('working');
}
};
//測試
worker.work();
worker.eat();
ES6之Promise(重點)
ES6中的Promise的出現就使得非同步變得非常簡單。promise中的非同步是這樣的:
* 每當我需要執行一次非同步操作的時候,我都需要new一個promise物件
* 每一個非同步操作的Promise物件都需要設定一個成功執行的條件和成功的回撥、一個失敗的條件和失敗的回撥
* Promise物件可通過執行then()方法獲得成功的回撥資訊
* Promise物件可通過執行catch()方法捕獲失敗的回撥資訊(當不執行catch方法時,若非同步操作失敗會報錯)
案例演示:
/** * 執行成功效果: * 做飯 --> 吃飯 --> 洗碗 * @type {number} */ //改變引數值(0或1)可測試不同效果 let isCook = 1; let isEat = 1; let isWash = 1; //做飯 let cook = (resolve,reject)=>{ console.log("愉快的做飯,打火鍋"); setTimeout(()=>{ if (isCook == 1){ resolve({status:1,msg:'做飯完畢'}); } else { reject({status: 0,msg: '做飯糊了,沒飯吃'}); } },2000); }; //吃飯 let eat = (resolve,reject)=> { setTimeout(() => { if (isEat == 1) { resolve({status: 1, msg: '吃完飯了'}); } else { reject({status: 0, msg: '不能吃飯,回去加班'}); } }, 2000); }; //洗碗 let wash = (resolve,reject)=>{ console.log("匆忙的洗碗"); setTimeout(()=>{ if (isWash == 1){ resolve({status:1,msg:'洗好碗,繼續加班'}); } else { reject({status: 0,msg: '還沒洗碗'}); } },2000); }; //使用Promise過程 new Promise(cook).then((res)=>{ if (res.status == 1){ console.log(res.msg); return new Promise(eat); } else { console.log(res.msg); } }).then((res)=>{ if (res.status==1){ console.log(res.msg); return new Promise(wash); } else { console.log(res.msg); } }).then((res)=>{ console.log(res.msg); }).catch((err)=>{ console.info(err.msg); });
總結:
定義方法名,省略掉function關鍵字(引數為resolve,reject,分別返回一個Promise物件),使用‘=>’替代,在方法體內根據判斷條件處理,然後使用resolve或reject返回。其他方法也是如此。
最後使用是new Promise(方法名),在then方法中的引數為呼叫方法中resolve的返回值,而在catch方法中接收的是reject的返回值。根據返回值可以進行相關操作。
感謝閱讀~