有这么两个函数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')
})()
撒科打诨
TA贡献1934条经验 获得超2个赞
添加回答
举报
0/150
提交
取消