【发布时间】:2016-11-15 21:11:56
【问题描述】:
babels async / await 代码是否足够聪明,可以看到下面的代码:
async function alpha () {
let resultOne = await processNumber(5)
let resultTwo = await processNumber(5 + 8)
let resultThree = await processNumber(resultOne.number)
let resultFour = await processNumber(resultOne.number + resultThree.number)
return resultFour
}
如下所示,该函数中的前两个 Promise 可以同时发生,因为执行这些操作所需的值不需要等待任何东西。
import Promise from 'bluebird'
async function beta () {
let {resultOne, resultTwo} = await Promise.props({
resultOne: processNumber(5),
resultTwo: processNumber(5 + 8)
})
let resultThree = await processNumber(resultOne.number)
let resultFour = await processNumber(resultOne.number + resultThree.number)
return resultFour
}
我将alpha 函数理解为等待每个异步函数调用,然后再继续下一个,其中beta resultOne 和resultTwo 同时发生,这只是可能的,因为它们没有'无需等待任何其他呼叫。我想知道这是否真的是这样,或者 babel 是否在幕后做了一些事情来将这些捆绑在一起。
【问题讨论】:
-
“足够聪明,可以看到下面的代码”——它足够聪明,看不到。这两个例子是不同的,实现
processNumber确实没有问题,所以2个代码样本返回了不同的结果。
标签: javascript async-await babeljs