为了账号安全,请及时绑定邮箱和手机立即绑定

async/await 中的并行串行问题

async/await 中的并行串行问题

一只萌萌小番薯 2019-03-14 14:15:03
有这么两个函数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)-btest: 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)-btest: 3001.277099609375ms  // 并行这是为什么呢??
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

因为你两个同时调用了

本来的逻辑是: 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')

})()


查看完整回答
反对 回复 2019-04-01
?
撒科打诨

TA贡献1934条经验 获得超2个赞

第一种情况是串行,第二种情况,promiseA的a()和promiseB的b()同时执行,也就是promiseB的执行没有等到promiseA执行完再执行,也就是并行,所以时间比第一种情况短


查看完整回答
反对 回复 2019-04-01
  • 3 回答
  • 0 关注
  • 868 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信