【发布时间】:2020-06-07 15:45:33
【问题描述】:
我被这个问题折磨了2天,但不敢问这个问题。我阅读了很多关于 Promise 和异步函数的文档。也许这个问题的答案会对其他用户有用。
我想在项目列表中调用一个详细项目的详细信息。
list 数组如下所示:
[
{
"id": 1,
"name: "A",
},
{
"id": 2,
"name: "B",
},
...
]
我想在list数组中调用的one数据:
{
"id": 1,
"url: "aaa",
"props": ["a", "a", "a"]
}
react-admin 承诺:
const list = dataProvider.getList(resource, params);
const one = (id: number) => dataProvider.getOne(resource, { id })
dataProvider 为具有data 属性的对象返回一个 Promise。
我写了一个并行返回数据的函数:
const data = async () => {
const list = await dataProvider.getList(resource, params);
const one = (id: number) => dataProvider.getOne(resource, { id });
list.data = await Promise.all(
list.data.map(async (item) => {
const itemOne = await one(item.id);
return {
...item,
custom: {
test: itemOne.data.url,
},
};
})
);
return list;
};
console.log(data())
现在我是 trying 来使用 reduce 而不是 map。
请帮我找到正确的解决方案或方向。
【问题讨论】:
-
@T.J.克劳德,对不起,我无法理解地写了一个问题。已更正。我的意思是,当我执行 Promise.all 时,第一个页面加载需要很长时间,因为所有元素同时加载,我可能是错的。
-
啊,谢谢你的澄清。 :-) 我已经更新了我的答案,我怀疑你是否想改为串联这些电话。
-
@T.J.克劳德,谢谢,你拯救了我的一些日子。看来我最初没有正确理解我的问题。
-
我的荣幸!我刚刚注意到我已修复的答案中的代码示例中有一个错误,我忘记将
getOne更改为getMany...我现在已经修复了。
标签: javascript asynchronous promise async-await