【发布时间】:2021-07-10 18:32:42
【问题描述】:
我正在从多个 API 检索数据,这些数据将被聚合到一个最终数组中,我打算在其中映射并显示在 UI 中(使用 React)。所以为了更好的上下文,我有这种情况。
首先我从主 API 检索主要数据
const response = await getFirstData() // returns an array
const [secondResult, thirdResult, fourthResult] = await Promise.all([
response.map(async (item) => await secondApiRequest()),
response.map(async (item) => await thirdApiRequest()),
response.map(async (item) => await fourthApiRequest())
])
从上面可以看出,基于主 API 中的response,然后我映射返回的数组以从其他 API 中获取数据(secondApiRequest(), etc..)。现在我在想secondResult、thirdResult、fourthResult 将解析为应有的对象数组。但是当我在 chrome 浏览器上查看日志时,却看到了这个。
0: Promise {<fulfilled>: Array(10)}
1: Promise {<fulfilled>: Array(10)}
2: Promise {<fulfilled>: Array(10)}
3: Promise {<fulfilled>: Array(10)}
4: Promise {<fulfilled>: Array(10)}
5: Promise {<fulfilled>: Array(5)}
6: Promise {<fulfilled>: Array(0)}
7: Promise {<fulfilled>: Array(0)}
8: Promise {<fulfilled>: Array(0)}
9: Promise {<fulfilled>: Array(0)}
我知道这些操作是并行运行的,但是如何让这些操作解析并返回应该包含对象的最终数组。此外,实现这一目标的最有效方法是什么,因为 finalArray 最后将包含 200 多个对象,我必须在 UI 上显示它们。谢谢,欢迎任何帮助。
【问题讨论】:
-
你能澄清一下你想在这里发生什么@thatkingguy_?如果
response包含10 个项目,您是否希望secondApiRequest被调用10 次?如果是这样,secondResult应该是什么,与这 10 个 api 调用有关? -
@JamesMonger 所以
response是一个对象数组。我映射response数组并对secondApiRequest等进行其他调用,现在对于每个映射,我将id传递给其他API 调用。例如response.map(async (item) => secondApiRequest(id))id参数是从response数组中的每个对象获取的。
标签: javascript node.js arrays asynchronous promise