asnyc/await的並行

一直覺得es7裏面的async和await能夠用來簡化串行異步代碼,而沒有想到還能並行。
說到底,這倆貨不過是promise的語法糖,await的做用只是串行解析promise。
一般咱們這樣寫:promise

function asyncAwaitFn(str) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(str)
        }, 1000);
    })
}
const parallel = async () => { //並行執行
    console.time('parallel')
    const parallelOne = await asyncAwaitFn('1');
    const parallelTwo = await asyncAwaitFn('2')
    console.log(parallelOne) //1
    console.log(parallelTwo) //2
    console.timeEnd('parallel') //2003.509033203125ms
}
parallel()

這是串行,顯然最後的執行時間應該大於2000ms。異步

但若是換一種寫法:async

function asyncAwaitFn(str) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(str)
        }, 1000);
    })
}
const parallel = async () => { //並行執行
    console.time('parallel')
    const parallelOne = asyncAwaitFn('1');
    const parallelTwo = asyncAwaitFn('2')
    console.log(await parallelOne) //1
    console.log(await parallelTwo) //2
    console.timeEnd('parallel') //1001.87255859375ms
}
parallel()

最後執行時間只要1000ms,顯然是並行了。code

不過嚴謹來講,這依然是promise自己的並行罷了。it

相關文章
相關標籤/搜索