Axios: chaining multiple API requests

前端 未结 7 774
失恋的感觉
失恋的感觉 2020-12-07 14:15

I need to chain a few API requests from the Google Maps API, and I\'m trying to do it with Axios.

Here is the first request, which is in componentWillMount()

7条回答
  •  庸人自扰
    2020-12-07 14:28

    First off, not sure you want to do this in your componentWillMount, it's better to have it in componentDidMount and have some default states that will update once done with these requests. Second, you want to limit the number of setStates you write because they might cause additional re-renders, here is a solution using 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,
      });
    
    }
    

提交回复
热议问题