对象键的异步/等待分配:它是并发的吗?
Async / await assignment to object keys: is it concurrent?
我知道这样做:
const resultA = await a()
const resultB = await b()
// code here
有效
a().then( resultA => {
b().then( resultB => {
// code here
})
})
基本上,a() 运行s 然后 b() 运行s。我嵌套它们以表明 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)
do a() and b() run concurrently?
不,他们 运行 按顺序。
等同于
a()
.then(result1 => b())
.then(result2 => ({result1, result2}))
不,每个 await
都会停止执行,直到 promise 完成,即使是 mid-expression。它们是否恰好是同一语句的一部分并不重要。
如果你想运行他们并行,只等待他们的结果一次,你必须使用await Promise.all(…)
。在你的情况下你会写
const [result1, result2] = await Promise.all([a(), b()]);
const obj = {result1, result2};
How would you represent the object assignment using then
/ callbacks?
每个等待值都有临时变量。每个 await
转化为一个 then
调用:
a().then(tmp1 => {
return b().then(tmp2 => {
const obj = {
result1: tmp1,
result2: tmp2
};
return …
});
})
如果我们想学究气,就得把对象的创建拆开来:
const tmp0 = {};
a().then(tmp1 => {
tmp0.result1 = tmp1;
return b().then(tmp2 => {
tmp0.result2 = tmp2;
const obj = tmp0;
return …
});
})
我知道这样做:
const resultA = await a()
const resultB = await b()
// code here
有效
a().then( resultA => {
b().then( resultB => {
// code here
})
})
基本上,a() 运行s 然后 b() 运行s。我嵌套它们以表明 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)
do a() and b() run concurrently?
不,他们 运行 按顺序。
等同于
a()
.then(result1 => b())
.then(result2 => ({result1, result2}))
不,每个 await
都会停止执行,直到 promise 完成,即使是 mid-expression。它们是否恰好是同一语句的一部分并不重要。
如果你想运行他们并行,只等待他们的结果一次,你必须使用await Promise.all(…)
。在你的情况下你会写
const [result1, result2] = await Promise.all([a(), b()]);
const obj = {result1, result2};
How would you represent the object assignment using
then
/ callbacks?
每个等待值都有临时变量。每个 await
转化为一个 then
调用:
a().then(tmp1 => {
return b().then(tmp2 => {
const obj = {
result1: tmp1,
result2: tmp2
};
return …
});
})
如果我们想学究气,就得把对象的创建拆开来:
const tmp0 = {};
a().then(tmp1 => {
tmp0.result1 = tmp1;
return b().then(tmp2 => {
tmp0.result2 = tmp2;
const obj = tmp0;
return …
});
})