感覺 Node.js 的世界突然美好了起來
終於可以用比較直覺的角度去寫程式
特別是那些習慣寫 C, Java, Python 等的人
但是在方便之餘
還是要特別小心 await 的使用情境
以避免造成效能上的問題
在下列例子中
testAsync1 會比 testAsync2 有更好的效能
因為在 testAsync1 中
我們會先用一個變數 promise2 去承接 Promise
此時,這個 Promise 裡面的操作有機會先執行
等到 await promise1 時,promise2 就差不多執行完畢 (秒數一樣)
故在 await promise2 時,promise2 應該就是一個 ready 的狀態 (ok or failed)
而在 testAsync2 中
因為我們少了那個中間變數
故在 await 時,至少一定要等待 3 秒
這就因此造成了 2 者間的差異
function getPromise() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('ok');
        }, 3000);
    });
}
async function testAsync1() {
    var date1 = new Date();
    var promise1 = getPromise();
    var promise2 = getPromise();
    var res;
    res = await promise1;
    res = await promise2;
    console.log(res, new Date() - date1);
    return Promise.resolve();
};
async function testAsync2() {
    var date1 = new Date();
    var res;
    res = await getPromise();
    res = await getPromise();
    console.log(res, new Date() - date1);
    return Promise.resolve();
};
testAsync1();
testAsync2();
執行結果如下
ok 3002
ok 6001
 
沒有留言:
張貼留言