gpt4 book ai didi

javascript - Nodejs - 将属性的 promise 数组解析为对象数组

转载 作者:行者123 更新时间:2023-11-30 20:23:49 25 4
gpt4 key购买 nike

运行 Node v 8+,以及 bluebird 和 lodash 库。

这是一个假对象数组:

const theList = [
{name: 'foo'
values: [ promise, promise, promise ] },
{name: 'bar',
values: [ promise ] }
];

我如何编写 promise 解析器,以便我可以迭代整个对象数组,并解析包含 promises 数组的属性?每个 promise 都将解析为一个对象数组...因此它最终可能看起来像:[ [resolvedObj1], [resolvedObj1,resolvedObj2,resolvedObj3], [resolvedObj1, resolvedObj2] ]

我希望他们都解决,这样我就有了以下对象:

let resolved = [
{name: 'foo',
values: [resolved, resolved, resolved, resolved, resolved]},
{name: 'bar',
values: [resolved]}
];

这是我目前的解决方案:

const resolvedCollection= await Promise.map(theList, async obj=> {
const resolved = await Promise.all(obj.values);
obj.values = _.flatten(resolved); // lodash "flatten" function
return obj;
});

有没有更简洁的方法来做到这一点?也可能是一种不需要对迭代的每个对象的 values 属性进行硬编码的方法?

最佳答案

您的方法看起来很干净。我会这样写:

const theList = [
{
name: 'foo',
values: [ promise, promise, promise ]
},
{
name: 'bar',
values: [ promise ]
}
];

theList.map(item =>
({
...item,
values: _.flatten(await Promise.all(item.values))
})
)

此外,您可以简单地替换 flatten 函数而无需任何递归,因为它只有两个级别。

[[1], [2, 3], [4, 5]].reduce((a, b) => [...a, ...b])

将其应用于原始解决方案将如下所示:

theList.map(item => 
({
...item,
values: (await Promise.all(item.values).reduce((a, b) => [...a, ...b]))
})
)

非常好的问题。

关于javascript - Nodejs - 将属性的 promise 数组解析为对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51141592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com