从 Promise.all 解构为对象

问题描述 投票:0回答:4

我发现自己现在写了很多代码,比如

const arr = await Promise.all([getName(), getLocation(), getDetails()])
const obj = {
    name: arr[0],
    location: arr[1],
    details: arr[2]
}
// send obj to somewhere else

这很丑陋。我希望有类似的东西

const obj = {}
[obj.name, obj.location, obj.details] = await Promise.all([getName(), getLocation(), getDetails()])

但这失败了。有没有一种优雅的方法来进行这样的解构?

javascript node.js promise destructuring
4个回答
11
投票

使用解构赋值

const [name, location, details] = await Promise.all([getName(), getLocation(), getDetails()]);

const obj = { name, location, details };

7
投票

确实有效。您只需在此处添加分号即可。

(async () => {
  const obj = {}; // <------------------------------
  [obj.first, obj.second, obj.third] = await Promise.all([1,2,3])
  console.log(obj)
})()


1
投票
await Promise.all([getName(), getLocation(), getDetails()])
    .then(([name, location, details]) => ({ name, location, details }));

0
投票

顺便说一句,数组解构比对象解构稍微慢一些,因为数组解构调用右侧的可迭代协议。

© www.soinside.com 2019 - 2024. All rights reserved.