当前位置: 首页 > 面试题库 >

Axios:链接多个API请求

曾实
2023-03-14
问题内容

我需要链接来自Google Maps API的一些API请求,而我正在尝试使用Axios来实现。

这是第一个请求,它在componentWillMount()中

axios.get('https://maps.googleapis.com/maps/api/geocode/json?&address=' + this.props.p1)
  .then(response => this.setState({ p1Location: response.data }))  }

这是第二个请求:

axios.get('https://maps.googleapis.com/maps/api/geocode/json?&address=' + this.props.p2)
  .then(response => this.setState({ p2Location: response.data }))

然后,我们有第三个请求,这取决于前两个请求是否完成:

axios.get('https://maps.googleapis.com/maps/api/directions/json?origin=place_id:' + this.state.p1Location.results.place_id + '&destination=place_id:' + this.state.p2Location.results.place_id + '&key=' + 'API-KEY-HIDDEN')
  .then(response => this.setState({ route: response.data }))

如何链接这三个电话,以便第三个电话发生在前两个电话之后?


问题答案:

首先,不确定是否要在其中执行此操作,componentWillMount最好将其插入componentDidMount并具有一些默认状态,这些状态一旦完成这些请求便会更新。其次,您要限制您编写的setState的数量,因为它们可能会导致其他重新渲染,这是使用async
/ await的解决方案:

async componentDidMount() {

  // Make first two requests
  const [firstResponse, secondResponse] = await Promise.all([
    axios.get(`https://maps.googleapis.com/maps/api/geocode/json?&address=${this.props.p1}`),
    axios.get(`https://maps.googleapis.com/maps/api/geocode/json?&address=${this.props.p2}`)
  ]);

  // Make third request using responses from the first two
  const thirdResponse = await axios.get('https://maps.googleapis.com/maps/api/directions/json?origin=place_id:' + firstResponse.data.results.place_id + '&destination=place_id:' + secondResponse.data.results.place_id + '&key=' + 'API-KEY-HIDDEN');

  // Update state once with all 3 responses
  this.setState({
    p1Location: firstResponse.data,
    p2Location: secondResponse.data,
    route: thirdResponse.data,
  });

}


 类似资料:
  • 问题内容: 我正在寻找一种可以链接多个HTTP请求的良好模式。我想使用Swift,最好使用Alamofire。 举例来说,我要执行以下操作: 发出PUT请求 发出GET请求 用数据重新加载表 承诺的概念似乎很适合此目的。如果我可以执行以下操作,则PromiseKit可能是一个不错的选择: 但这是不可能的,或者至少我不知道。 如何在不嵌套多个方法的情况下实现此功能? 我是iOS的新手,所以也许我缺少

  • 问题内容: 因此,我一直将以下代码放入我的React JS组件中,而我基本上是试图将两个API调用都置于一种称为的状态,但是以下代码却出现了错误: 现在,我猜我无法像我一样添加两个数据源,但是还可以怎么做呢?我只希望将来自该API请求的所有数据置于一种状态。 这是我目前收到的错误: 谢谢 问题答案: 您不能将数组“添加”在一起。使用array.concat函数(https://developer.

  • 出身背景 我将React Native中内置的应用程序连接到REST API。我通过Axios处理请求,并使用Redux存储查询结果。我有一个api连接的index.js文件,它保存了作为请求处理程序的函数,这些请求需要越来越深的授权级别。我有一个简单的函数返回访问令牌,这是由以下代码触发,当前位于应用程序的“欢迎页面”。 理想情况下,在浏览几个屏幕后,用户将进入主页并触发以下代码: 到目前为止,

  • 所以我有api:,它调用函数。Laravel中的此功能是: 如何发送变量到我的函数。我在某处发现了这个: 但它不起作用。我尝试了,它返回给我一个id=1的用户,所以问题在于axios中的这个链接。

  • 我对vue和axios非常陌生,需要很大的帮助。 我有一个API返回我一些数组数据。 应用程序编程接口: 如您所见,在本地被调用。我的机器上的所有图像都在本地.我是怎么把所有图像和V-for里的对应药水联系起来的?是可能的Javascript渲染图像是不是在同一个服务器作为api数据? HTML代码: JS代码: })

  • 问题内容: 我想知道如何一次获取多个GET URL,然后将获取的JSON数据放入我的React DOM元素中。 这是我的代码: 但是,我想从服务器中获取其他JSON数据,然后使用传递到其中的所有这些JSON数据呈现我的ReactDOM。例如: 这可能吗?如果不是,将多个JSON数据提取到我的渲染ReactDOM元素中的其他解决方案是什么? 问题答案: 您可以在解决方案之前依靠Promises来执行