Bab*_*ess 7 javascript async-await es6-promise ecmascript-2017
我知道这样做:
const resultA = await a()
const resultB = await b()
// code here
Run Code Online (Sandbox Code Playgroud)
是有效的
a().then( resultA => {
b().then( resultB => {
// code here
})
})
Run Code Online (Sandbox Code Playgroud)
基本上,a()运行然后 b()运行.我嵌套它们以显示resultA和resultB都在我们的范围内; 然而这两个功能都没有立即运行.
但是这个怎么样:
const obj = {
result1: await a(),
result2: await b()
}
Run Code Online (Sandbox Code Playgroud)
做一个()和b()同时运行?
以供参考:
const asyncFunc = async (func) => await func.call()
const results = [funcA,funcB].map( asyncFunc )
Run Code Online (Sandbox Code Playgroud)
我知道这里funcA并且funcB同时运行.
奖金:
你将如何表示对象分配
const obj = {
result1: await a(),
result2: await b()
}
Run Code Online (Sandbox Code Playgroud)
使用then/回调?
更新:
@Bergi在这个答案中是正确的,这是顺序发生的.要共享一个很好的解决方案,让对象同时工作而不必将数组中的对象拼凑在一起,也可以使用Bluebird如下方法
const obj2 = Bluebird.props(obj)
Run Code Online (Sandbox Code Playgroud)
不,每个人await都会停止执行,直到承诺完成,甚至是中间表达.它们是否恰好是同一声明的一部分并不重要.
如果你想并行运行它们,并且只等待一次它们的结果,你必须使用它await Promise.all(…).在你的情况下,你写
const [result1, result2] = await Promise.all([a(), b()]);
const obj = {result1, result2};
Run Code Online (Sandbox Code Playgroud)
您将如何使用
then/ callbacks 表示对象分配?
使用每个等待值的临时变量.每个await转换成一个then电话:
a().then(tmp1 => {
return b().then(tmp2 => {
const obj = {
result1: tmp1,
result2: tmp2
};
return …
});
})
Run Code Online (Sandbox Code Playgroud)
如果我们想要迂腐,我们必须分开创建对象:
const tmp0 = {};
a().then(tmp1 => {
tmp0.result1 = tmp1;
return b().then(tmp2 => {
tmp0.result2 = tmp2;
const obj = tmp0;
return …
});
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4410 次 |
| 最近记录: |