具有多个 api 调用的 async/await 函数出现问题

问题描述

我正在使用 React 和 NodeJS 构建一个国际象棋应用程序,该应用程序从 chess.com 的 api 中提取游戏信息。我遇到了 async/await 函数的问题。它有时会起作用,但有时我会收到错误消息:

UnhandledPromiseRejectionWarning:FetchError:https://api.chess.com/pub/player/(username)/games/2019/01 处的 json 响应正文无效,原因:JSON 输入意外结束

所以基本上,我的目标是首先获取一个 url 列表(特定用户的游戏存档)。接下来,我想从每个 url 中获取数据(这些数据代表用户玩过的实际游戏)。

从第一次获取获取 url 从来都不是问题。错误总是发生在 Promise.all() 函数中的 fetch 中。

这是我目前使用的代码

我传入 url 以获取指定用户的档案列表: https://api.chess.com/pub/player/USERNAME/games/archives

const getData = async (url) => {
   
   let response = await fetch(url).catch(err => {console.log(err); throw err;});
   let json1 = await response.json()
   let games = await Promise.all(json1.archives.map(async (id) => {
      let gameres = await fetch(id).catch(err => {console.log(err); throw err;)
      return gameres.json()
   }));
   parseData(games);
}

解决:好的,所以我解决了这个问题。问题不在于代码,而在于 api 的限制。每个人都可以无限制地进行任意数量的请求,但是当一次向他们的 api 发出多个请求时(如在异步函数中),它将使他们的 api 过载并导致错误。因此,根据开发人员的说法,唯一的方法是使用同步函数。这令人困惑,因为我认为同步请求已被弃用,很快将不再使用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)