使用Vue中的获取一次发出多个API请求

艾伦

我想在vue组件中一次对ReST API进行两个api调用。我已经完成了在线研究,并使用了以下逻辑:

// Multiple fetches
      Promise.all([
        fetch(
          `https://api.covid19api.com/live/country/${this.selected}/status/confirmed/date/${this.yesterday}`
        ),
        fetch(
          `https://api.covid19api.com/live/country/south-africa/status/confirmed/date/2020-03-21T13:13:30Z`
        )
      ])
        .then(responses => {
          // Get a JSON object from each of the responses
          return responses.map(response => {
            return response.json();
          });
        })
        .then(data => {
          // Log the data to the console
          // You would do something with both sets of data here

          this.coronaVirusStats1 = data[0];
          console.log(this.coronaVirusStats1);
        })
        .catch(function(error) {
          // if there's an error, log it
          console.log(error);
        });
    }

控制台值是我理解的承诺,但是当我查看组件下的Vue devTools时,我看到coronaVirusStats1的值为“ Promise”,而不是我期望返回的对象数组。当我进行一次读取并使用数据变量时,没有问题。但是,我对于如何从对多个端点的调用中访问返回的数据感到困惑。我在这里尝试了所有解决方案,都在获取api,但是没有一个有效。如果有人能阐明从提取中访问数据的正确方法,我将非常感激。

菲尔

你就在那里。问题是您的第一个then返回了一个promise数组不幸的是,promise链仅适用于Promise实例,因此这里没有任何东西可以等待您的promise解决。

快速解决方案是将第一个更改then

return Promise.all(responses.map(r => r.json()))

话虽这么说,fetchAPI还有更多功能,尤其是在处理错误方面。

对于每个fetch调用,我都会使用类似以下的内容,以确保正确处理网络错误和不成功的HTTP请求。

这也将处理JSON响应的展开,因此您不必使用上面的内容

Promise.all([
  fetch(url1).then(res => res.ok && res.json() || Promise.reject(res)),
  fetch(url2).then(res => res.ok && res.json() || Promise.reject(res))
]).then(data => {
  // handle data array here
})

参见https://developer.mozilla.org/en-US/docs/Web/API/Response/ok

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Axios-一次发出多个请求(vue.js)

ReactJS Fetch 调用一次但多个请求发出

使用Google的Text to Speech API一次执行多个请求时,仅获取最后一个请求的音频

在 Python 3 中每 x 秒发出一次 API 请求

gmail api批处理请求以一次获取多个消息golang

使用节点中的大型媒体文件一次发出多个发布请求时出现内存问题

如何在REACT INFINITE中为每个页面仅发出一次API请求,请滚动此处

我应该一次加载全部数据库结果还是发出多个请求?

如何根据每 3 秒更新一次的道具每分钟发出一次 api 请求?

将多个请求合并为一个请求,并在Angular 2中仅命中一次api

使用Laravel向一个API发出多个请求

如何使用Node中的Promises一次并行并行处理多个请求

Vimeo API在一次通话中获取多个视频的视频详细信息

在 Rails 中一次从多个表中获取记录?

如何使用pg-promise一次从多个查询中获取结果?

如何使用 jquery .when().apply() 一次从多个承诺中获取解析数据

使用Python facebook包一次获取多个连接

案例陈述一次发出多个警报

连续获取文件,但仅发出一次警报

使用javascript打开多个窗口并单击一次按钮即可提交多个请求

在Google Apps脚本中提取多个api请求,一次解析

使用Angular 2中的Observables一次获取数据

使用来自 vue 组件的 axios 从后端 API 发出获取请求

使用GitHub API确定对master的最后一次提交是否是合并请求请求的结果?

使用Google Sheets API一次修改同一行中的多个单元格

是否可以获取合并请求的最后一次提交 sha?GITLAB API

如何一次同时执行多个分页请求并使用 Spring WebFlux 按顺序收集

SVG使用多个,一次加载

在 sql 请求中获取某个项目的最后一次出现