ES7 async await 多個await並行


async/await

ES7語法糖,基於Promise,處理異步任務更加方便

async

函數的返回值為promise對象,promise對象的結果由async函數執行的返回值決定

        /* 
            async:
            async不一定需要await,但是await一定需要async
            加了async之后,函數的執行結果默認返回一個Promise對象
         */
        async function f1() {
            return 1
        }
        // console.log(f1())//Promise {<resolved>: 1}

        //產生一個失敗的promise
        async function f2() {
            // throw 1;
            return Promise.reject(2)
        }
        // console.log(f2()) //Promise {<rejected>: 1}

await

右側的表達式一般為promise對象,但也可以是其他的值
如果表達式是promise對象,那么返回的是promise成功的值
如果是其他的值,直接將此值作為await的返回值

如果await的promise失敗了,就會拋出異常,需要進行try catch處理,同時通過trycatch可以獲取失敗的promise的值

        /* 
            await
            await必須和async連用
            await右側表達式為promise,得到的結果就是promise成功的value
            await右側表達式不是promise,得到的結果就是值本身

            await只能得到成功的結果,如果想要得到失敗的結果,只能用trycatch
         */

        async function fn3() {
            try {
                return await Promise.reject(2);
            } catch (error) {
                console.log(error)//2
            }
        }
        console.log(fn3())
        /*
            Promise {<pending>}
                [[PromiseStatus]]: "rejected"
                [[PromiseValue]]: 2
         */

await是串行的,如果想讓多個await並行,那么可以用promise.all進行操作,返回一個多個await結果的數組


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM