es6 異步 之async await 學習總結

 asyncawaitES2016/ es7 新增的兩個關鍵字, 它們借鑑了 ES2015 中生成器在實際開發中的應用。
        目的是爲了簡化Promise api 的使用, 並非替代 Promise

        async:目的是爲了簡化在函數的返回值中對Promise的創建
        例如:
         async function test() {
            console.log(1);
            return 2; // resolve  
            //  throw reject
        }

        // 等效於

        function test() {
            return new Promise((resolve, reject) => {
                console.log(1);
                resolve(2);
            })
        }

        await: 關鍵字必須出現在async函數中
        await 等待的是thenable裏面成功的狀態

          async function test() {
            const result = await 1;
            console.log(result);
        }

        // 等效於

        function test() {
            return new Promise((resolve, reject) => {
                Promise.resolve(1).then(data => {
                    const result = data;
                    console.log(result)
                    resolve();
                })

            })
        }

        上面的那種方法處理的是promise的正常狀態,如何處理錯誤狀態呢?

          function getRandom() {
            if (Math.getRandom < 0.5) {
                return 1;
            } else {
                throw 2;
            }
        }

        async function test() {
            try {
                const result = await getRandom();
                console.log("正常狀態", result);
            } catch{
                console.log("錯誤狀態",err)
            }
        }

        /**
         * @description:  使用promise 改造 計時器
         * @param : 
         * @return: 
         */
        function delay(duration) {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve();
                }, duration);
            })
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章