記錄async/await學習

async函數用法和簡要分析

學習阮一峯老師的ES6入門後的記錄es6

一、Generator 函數

至關於一個狀態機,返回一個可遍歷的對象(該遍歷器對象能夠用for of等調用遍歷接口的方法等調用值),用function*來定義generator函數,yield來標記站廳點
示例:編程

<script>
        function* helloWorldGenerator() { //function*:定義generator函數
            yield 'hello'; //yield:表示暫停執行的標誌
            yield 111 + 233; //表達式並不會馬上計算,只有next到這纔開始計算
            return 'ending';
        }

        var hw = helloWorldGenerator();

        console.log(hw.next()); //.next(),恢復執行
        console.log(hw.next());
        console.log(hw.next());
        console.log(hw.next());
        // {value: "hello", done: false}
        // {value: "344", done: false}
        // {value: "ending", done: true}
        // {value: undefined, done: true}
        //value爲當前yield表達式的值,done:boolean,表明遍歷是否結束
    </script>

二、協程的概念(異步編程)

  • 第一步,協程A開始執行。
  • 第二步,協程A執行到一半,進入暫停,執行權轉移到協程B。
  • 第三步,(一段時間後)協程B交還執行權。
  • 第四步,協程A恢復執行。

三、async/await初步應用

async至關於*:表明異步操做的意思
await至關於yield:表明等待執行的意思promise

async函數相比與generator函數的差別在於:
  • async內置執行器,因此不用.next()方式顯示執行
  • async函數返回的是promise對象
  • async函數相比與generator函數,表示方式更加明白

簡單示例:異步

<script>
        async function helloWorldGenerator() { //function*:定義generator函數
            await console.log('hello'); //yield:表示暫停執行的標誌
            await console.log(111 + 233); //表達式並不會馬上計算,只有next到這纔開始計算
            return 'ending';
        }
        helloWorldGenerator();//普通函數通常執行
        //hello
        //344
    </script>
相關文章
相關標籤/搜索