将Promise.all结果分配给对象属性

时间:2018-09-11 14:22:27

标签: javascript

如果我想为两个变量分配两个已解决的promise,我可以这样做:

const [a, b] = await Promise.all([first(), second()])

但是指定我有一个带有属性的对象,而不是ab,我如何影响对象属性的结果?

这不起作用:

const x = {}
const [x.a, x.b] = await Promise.all([first(), second()])

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

如果您选择单线,很抱歉让您失望。取消引用分配是为了将对象简洁地扩展为变量,而不是对象之间的数据映射。

我也鼓励您使用avoid clever code,因为如果很难阅读,很难理解,这意味着很难验证它在所有适当的边缘情况下是否都按预期工作。

在这种情况下,添加更多行非常简单明了:

awk

作为后续问题,如果您不想在当前范围内生成const [a, b] = await Promise.all([first(), second()]) const x = { a, b } a变量,该怎么办?例如,如果已经定义了ba并且需要避免命名冲突该怎么办?

在这种情况下,添加更多明确的代码很有用:

b

答案 1 :(得分:2)

如果要分配给属性,则不能使用const(用于声明变量):

const x = {};
[x.a, x.b] = await Promise.all([first(), second()]);

请注意,semicolon is necessary here如果要忽略它们,并让它们在需要的任何地方自动插入,则将need to put one at the begin行如下:

const x = {}
;[x.a, x.b] = await Promise.all([first(), second()])