pretty code

2019年5月31日 星期五

javascript async 小陷阱

有時候真的對 javascript 沒好氣。

原本以為算是已經掌握了 async / await 的用法,沒想到還是會遇到原本沒想過的 case。

一般來說,想要用 async 就是想要避免 callback 寫法,但如果在 async 裡面使用非同步語法會怎樣?

嚴格來說是沒有使用 await 配合非同步。

底下的例子就告訴我們結果。

原因是 javascript 會自動幫我們回傳 1 個 promise,所以 setTimeout 還未倒數完,程式已回傳結果。


async function test() {
    setTimeout(() => {
        console.log('after 2 seconds');
        return Promise.resolve('good');
    }, 2000);
}

test().then((res) => {
    console.log(res);
}).catch(err => {
    console.log(err);
});

結果

undefined
after 2 seconds

沒有留言: