一只萌萌小番薯
2019-03-14 14:15:03
有這么兩個函數(shù)var a = function () { return new Promise((resolve, reject)=>{ setTimeout(()=>{ resolve('a') }, 3000) })}var b = function () { return new Promise((resolve, reject)=>{ setTimeout(()=>{ resolve('b') }, 2000) })}如果這樣執(zhí)行;(async()=>{ console.time('test') var aa = await a() var bb = await b() console.log(`$(aa)-${bb}`) console.timeEnd('test')})()結(jié)果是$(aa)-btest: 5010.7548828125ms // 串行但是如果這樣執(zhí)行;(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')})()結(jié)果則是$(aa)-btest: 3001.277099609375ms // 并行這是為什么呢??
3 回答

楊魅力
TA貢獻(xiàn)1811條經(jīng)驗 獲得超6個贊
因為你兩個同時調(diào)用了
本來的邏輯是: a調(diào)用 等待a的三秒 然后b執(zhí)行 等待b 兩秒 向下執(zhí)行
現(xiàn)在是: a,b同時調(diào)用 等待a的三秒 等待的同時b的兩秒已經(jīng)執(zhí)行完畢 所以到b時直接往下執(zhí)行
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貢獻(xiàn)1934條經(jīng)驗 獲得超2個贊
添加回答
舉報
0/150
提交
取消