async/await 中的并行串行问题

有这么两个函数


var a = function () {

  return new Promise((resolve, reject)=>{

    setTimeout(()=>{

      resolve('a')

    }, 3000)

  })

}

var b = function () {

  return new Promise((resolve, reject)=>{

    setTimeout(()=>{

      resolve('b')

    }, 2000)

  })

}

如果这样执行


;(async()=>{

  console.time('test')

  var aa = await a()

  var bb = await b()

  console.log(`$(aa)-${bb}`)

  console.timeEnd('test')

})()

结果是


$(aa)-b

test: 5010.7548828125ms  // 串行

但是如果这样执行


;(async()=>{

  console.time('test')

  var promiseA = a()

  var promiseB = b()

  var aa = await promiseA

  var bb = await promiseB

  console.log(`$(aa)-${bb}`)

  console.timeEnd('test')

})()

结果则是


$(aa)-b

test: 3001.277099609375ms  // 并行

这是为什么呢??


一只萌萌小番薯
浏览 869回答 3
3回答

杨魅力

因为你两个同时调用了本来的逻辑是: a调用 等待a的三秒 然后b执行 等待b 两秒 向下执行现在是: a,b同时调用 等待a的三秒 等待的同时b的两秒已经执行完毕 所以到b时直接往下执行var promiseA = a()var promiseB = b()这样试一下;(async () => {    console.time('test')    var promiseA = a()    var aa = await promiseA    var promiseB = b()    var bb = await promiseB    console.log(`$(aa)-${bb}`)    console.timeEnd('test')})()

撒科打诨

第一种情况是串行,第二种情况,promiseA的a()和promiseB的b()同时执行,也就是promiseB的执行没有等到promiseA执行完再执行,也就是并行,所以时间比第一种情况短
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript