有这么两个函数
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 // 并行
这是为什么呢??
因为你两个同时调用了
本来的逻辑是:
a
调用 等待a
的三秒 然后b
执行 等待b
两秒 向下执行现在是:
a,b
同时调用 等待a
的三秒 等待的同时b
的两秒已经执行完毕 所以到b
时直接往下执行这样试一下