1. 程式人生 > >ES6簡單入門(重點:Promise)

ES6簡單入門(重點:Promise)

箭頭操作符

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本身就是面向物件的,提供類的支援後,物件的建立,繼承更加只管了。

增強的物件字面量

  1. 可以在物件字面量中定義原型
  2. 定義方法可以省略function
  3. 直接呼叫父類方法
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的返回值。根據返回值可以進行相關操作。

 

 

 

感謝閱讀~