解决嵌套在对象数组中的承诺

op_exchanger

我有一个从数据库中获取的对象数组。

const users = await User.findAll();

对于他们每个人,我想调用一个异步函数user.getDependency()来获取另一个相关表,并将嵌套在对象中的表分解为最终格式,如下所示:

[
  User {
    attr1: value,
    attr2: value,
    ...
    Dependency: {
      attr1: value,
      ...
    }
  },
  User {
    ...

等等

现在,我明白了。我能够想到的涉及异步和循环的唯一可能性是2:

选项1:映射它们并重新获得承诺:

  users.forEach((user) => {
    user.dependency= user.getDependency();
  });

有了这个,我就在格式上得到了想要的结果,只是我得到的显然不是解决的东西Dependency: Promise { <pending> },也就是说,promise全部嵌套在数组的每个用户对象中。而且我不知道该如何进行。如何遍历所有用户对象并解决它们在内部的承诺?

选项2:返回Promise.all中要解决的承诺

const dependencies = Promise.all(users.map((user) => {
  return user.getDependency();
}));

这给了我一个分离的数组,其中包含了我想要的所有依赖关系,仅此而已。我得到一个包含对象用户的数组,另一个包含对象依赖项。

让我特别烦恼的是,我认为必须有一种简单直接的方法来完成它,而我却很想念。有人有主意吗?非常感谢

理通

为了建立直觉,这是您的forEach示例,向正确方向按一下即可转换。

users.forEach((user) => {
  user.getDependency().then(dependency => {
    user.dependency = dependency
  })
})

上面的内容是“对于每个用户,从获取依赖项开始,然后在解决后将依赖项添加到用户中”。我不认为上面的方法很有用,因为一旦所有依赖项都已完成提取,您可能希望对用户执行某些操作。在这种情况下,您可以Promise.all沿侧面使用.map

const usersWithResolvedDependencies = await Promise.all(
  users.map(user => user.getDependency().then(dependency => {
    user.dependency = dependency
    return user
  }))
)
// do stuff with users

我应该提一下,我写了一个简化异步的库,当然也可以简化这个问题。以下等同于以上内容。map并且assign是从我的图书馆,rubico

const usersWithResolvedDependencies = map(assign({
  dependency: user => user.getDependency()
}))(users)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从嵌套在对象中的数组中删除对象

更改嵌套在对象数组中的对象的状态

MongoDB获取嵌套在对象数组中的单个对象

如何设置状态嵌套在对象数组中的数组

如何推送到嵌套在对象中的数组?

如何迭代嵌套在对象中的数组作为道具

嵌套在对象数组解构中并赋值

遍历嵌套在对象内部的数组

将对象推入嵌套在对象数组中的对象数组

如何渲染属性嵌套在对象嵌套数组中的元素数组?

如何通过嵌套在对象数组的属性中的对象属性的值在对象数组中查找多个索引?

解决嵌套在对象内部的任何数量的Promise

如何使用_.where通过ID查找嵌套在对象数组中的对象?

useState 更新嵌套在对象内部的对象数组

如何获取深度嵌套在对象中的数组中的项目总数?

如何更新和定位嵌套在对象中的数组中的正确索引?

在对象数组的数组中运行承诺

如何仅在猫鼬中使用聚合填充嵌套在对象数组中的字段?

如何从嵌套在对象中的数组中选择随机项目

Javascript:找不到嵌套在对象中的数组的最大值

如何在React Admin的show / ArrayField组件中呈现嵌套在对象内部的数组的内容?

删除嵌套在对象内部的数组项

从嵌套在对象属性内的数组中提取数据

更新嵌套在对象内部的数组状态(ReactJS)

从嵌套在对象中的数组中随机选择元素的逻辑,该对象进一步嵌套在数组中

确定函数是否嵌套在对象中

嵌套在对象中的函数如何知道其路径?

如何将对象推送到嵌套在对象中的数组中并在 Vue 中保留反应性

解构嵌套在数组中的对象