在我的 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/