【发布时间】:2017-10-17 16:02:38
【问题描述】:
我知道这样做:
const resultA = await a()
const resultB = await b()
// code here
有效
a().then( resultA => {
b().then( resultB => {
// code here
})
})
基本上,a() 运行 然后 b() 运行。我嵌套它们以表明 resultA 和 resultB 都在我们的范围内;但是这两个功能都没有立即运行。
但是这个呢:
const obj = {
result1: await a(),
result2: await b()
}
a() 和 b() 是否同时运行?
供参考:
const asyncFunc = async (func) => await func.call()
const results = [funcA,funcB].map( asyncFunc )
我知道这里funcA 和funcB 会同时运行。
奖金:
你将如何表示对象分配
const obj = {
result1: await a(),
result2: await b()
}
使用then/回调?
更新:
@Bergi 在这个答案中是正确的,这是按顺序发生的。要分享一个很好的解决方案,让一个对象同时进行这项工作,而不必将数组中的对象拼凑在一起,也可以使用Bluebird,如下所示
const obj2 = Bluebird.props(obj)
【问题讨论】:
-
您的“供参考”示例存在语法错误(因此具有误导性)。如果使用
await,则必须使箭头函数async,然后很明显它们可能会同时运行,因为它们是单独的函数评估。 -
感谢您的理解,已更正。
-
请注意,JS函数可能会触发异步进程并发运行,但JS函数本身并不是多线程同时执行意义上的并发运行。
标签: javascript async-await es6-promise ecmascript-2017