javascript - 从包含 Promise 的对象数组中获取数据

标签 javascript reactjs axios

在我的 React 应用程序中,我有一些用户 ID,需要从不同的端点获取他们的电子邮件和姓名,所以我要做的是:

const promises = ids.map(
   id => (  {email: axios.get(`blabla/${id}/email`), name: axios.get(`blabla/${id}/name`)}  )
);

它让我回来:

[
{email: Promise, name: Promise},{email: Promise, name: Promise},{email: Promise, name: Promise},...
]

现在要获取数据,我要做的是:

  const results = [];
  promises.map(({ email, name}) =>
      Promise.all([email, name]).then((result) => {
        results.push({
          email: result[0].data,
          name: result[1].data,
        });
      })
    );

但我有一种感觉,这可能不是一个好方法,我的意思是它现在可以工作,但我不想以后遇到任何问题!哈哈,例如, promise 之间的竞争,或者例如为另一个用户设置的用户电子邮件。我不知道它们是否有可能发生,但我需要与你们的专家核实一下,如果你们确认这种方式,或者你们是否提出其他建议。

最佳答案

除了您没有使用 map 创建的数组之外,一切都很好。只要您不使用 map 的返回值,就可以使用循环(或 forEach)。此外,每当您写入要从异步操作结果关闭的数组时,它都会让您在填充之前意外使用该数组

但在这种情况下,我将使用 map 返回的数组:

Promise.all(
    promises.map(({ email, name}) =>
        Promise.all([email, name])
        .then(([email, name]) => ({email, name}))
    )
).then(results => {
    // ...use results here, it's an array of {email, name} objects
})
.catch(error => {
    // ...handle error here, at least one operation failed...
});

关于javascript - 从包含 Promise 的对象数组中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62413992/

相关文章:

javascript - 将字符串转换为数组

node.js - react : Run on production without build

node.js - 使用 axios 调用登录 API 时,当我的凭据在 catch 中错误时,我没有收到任何响应

javascript - 未捕获的不变违规 : Target container is not a DOM element

node.js - Node 和reactjs axios服务器请求返回index.html文件而不是json

javascript - Sequelize Query FindAll 不过滤

javascript - 使用 dojo 显示 Json 数据

javascript - Javascript 对象是否有相当于 python 的 __name__

javascript - 允许 Gridstack 仅可拖动到项目的特定区域

reactjs - react 开始登陆网址