1. 程式人生 > >Es6中處理非同步的方式

Es6中處理非同步的方式

一、在javascript中造成非同步的因素

  • 1、定時器
  • 2、事件

二、使用Promise把非同步變成同步

參考文件

  • 1、關於promise的基本使用

    /**
     * Promise需要例項化物件
     * 裡面是一個函式,
     * resolve是一個代表成功的函式,如果不呼叫這個函式,下面的函式無法繼續進行
     * 下面只能列印"第一個定時器"
     * reject是一個代表失敗的函式
     */
    var promise = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log("第一個定時器"
    ); },3000) }) promise.then(function () { setTimeout(()=>{ console.log("第二個定時器"); },3000) })
  • 2、修改上面的程式碼都列印

    var promise = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log("第一個定時器");
            resolve();
        },3000)
    })
    promise.then(function () {
        setTimeout(()=>{
            console.log("第二個定時器"
    ); },3000) })
  • 3、在resolve傳遞引數到then的函式接收

    var promise = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log("第一個定時器");
            resolve('你好');
        },3000)
    })
    promise.then(function (arg) {
        setTimeout(()=>{
            console.log("第二個定時器");
            console.log(arg);
        },3000)
    })
  • 4、reject的使用與resolve一樣的

三、Generator函式的介紹

  • 1、定義方式(*可以靠前、靠後、中間)

    function * foo(){
        yield '我是第一個引數';
    }
  • 2、呼叫方式

    var f = foo();
    console.log(f.next());
  • 3、Generator函式與普通函式的區別

    • 1、定義函式的時候在function與函式名稱之間多了一個*
    • 2、Generator函式使用yield作為返回資料
    • 3、Generator函式中可以定義多個yield返回資料,而普通函式只能是一個return
    • 4、Generator函式裡面也可以有return與普通函式一樣的return後面的程式碼不執行
    • 5、Generator函式與普通函式的呼叫方式不一樣
  • 4、參考文件

四、async函式的認識