问题描述
请原谅我缺乏理解,假设我有以下结构的 gists 数组:
{
"description": 3,"id": 123456,"forks_url": "https:api.github.com..."
}
我需要获取用户的要点列表,还要查询要呈现的每个要点的分叉。我如何才能使用 Promise.all
或任何其他可能有帮助的库进行最少数量的异步 api 调用
我的意思是,我现在每次都获取 gists
并查询 forks
使其正常工作,但它进行了大量我想避免的 API 调用。
const GistData = ({ username }) => {
React.useEffect(() => {
if (!username) {
return;
}
setState({ status: 'pending' })
octokit.request(`GET /users/${username}/gists`,username)
.then(
gists => {
setState({ gists: gists.data,status: 'resolved' })
},error => {
setState({ error,status: 'rejected' })
}
);
},[username]);
if (status === 'resolved') {
return gists.map(
gist => <GistCard key={gist.id} gist={gist} username={username} />
)
} else {
throw error
}
}
export default GistData
const GistCard = ({ gist,username }) => {
React.useEffect(() => {
if (!id) {
return;
}
setState({ status: 'pending' });
octokit.request(`GET /gists/${id}/forks`,id).then(
(forks) => {
setState({ forks: forks.data,status: 'resolved' });
},(error) => {
setState({ status: 'rejected',error });
}
);
},[id]);
if (status === 'resolved') {
return (
<div className="gist">
<p>{description}</p>}
<Tags fileList={files} />
{forks.length > 0 && (
<div>
<h3>Forks: ({forks.length})</h3>
{forks.map((fork) => (
<Fork key={fork.id} fork={fork} />
))}
</div>
)}
</div>
);
} else {
throw error
}
};
export default GistCard;
解决方法
在我看来,这是一个后端问题。
以数据的方式,前端不可能创建Promise.All
,因为您将需要初始调用来获取 Gist 列表。在技术上获得要点列表后,您可以执行 Promise.All
,但调用量与您当前的调用量相同。
好吧,我猜你的意思是每次获得要点信息时都进行 get 。为此,您可以联系.then
。
.then(gists => {
setState({ gists: gists.data,status: 'resolved' })
},error => {
setState({ error,status: 'rejected' })
}
return gists.data
).then(data => call fetch fork by each gist);