pretty code

2018年10月16日 星期二

Javascript async / await 速成



01. await 後面接的是 1 個 Promise,一定會等待此 Promise 狀況 ready 

02. new Promise((resolve, reject) => {
        // ok 
        resolve(xx);
        return;
        
        // error
        reject(new Error("xxx"));
    });

03. async function 一定要回傳 1 個 Promise
    async function asyncXXX(xx) {
        try {
            
            // return value, 會被隱性轉成 Promise
            return 1;
            
            // Use static method
            return Promise.resolve(xx);
            
        } catch(err) {
            return Promise.reject(err);        
        }
    }
    
    asyncXXX(xx).then((xx) => {
        console.log(xx);
        
        // 如果有 return Promise 會形成 Promise chain
        return 1;    
        return new Promise(...);
    }).catch((err) => {
        // err is Error type
        console.log(err.message);
    });

04. Promise 只是確保在 Promise 控制的範圍內可以照順序
    在呼叫 Promise 時 本身還是非同步
    故底下會先印出 "after" 而不是 "in then"

    async function test() {
        return Promise.resolve();
    }

    test.then(() => {
        console.log("in then");
    });

    console.log("after");

05. async / await 只是語法糖,骨子裡還是 Promise 的運用

沒有留言: