即使调用 API 一次,如何修复状态 429 错误?

我正在尝试使用 this API 获取有关航天飞机的信息。我使用 axios 获取有关航天器的信息,但收到状态 429 错误。我研究了一下,发现是status 429的错误,是你调用API的次数太多了,但是我的代码只调用了一次。。。请各位高手给我解决这个问题的建议?

代码:

import React from 'react'
import { View,Text,Alert,flatList,StyleSheet } from 'react-native'
import axios from 'axios'

export default class SpaceCraftScreen extends React.Component {

  constructor() {
    super()
    this.state = {
      spaceCraftData: {}
    }
  }

  getSpaceCraftData = async () => {
    axios
      .get("https://ll.thespacedevs.com/2.2.0/config/spacecraft/")
      .then(response => {
        this.setState({spaceCraftData:response.data.results})
        console.log(this.state.spaceCraftData)
      })
      .catch(error => {
        Alert.alert(error.message)
      })
  }

  componentDidmount = () => {
    this.getSpaceCraftData()
    //setInterval(() => {this.getSpaceCraftData()},10000)
    
  }
  render() {
    if(Object.keys(this.state.spaceCraftData).length === 0) {
      return(
        <View>
          <Text style = {{textAlign:'center',marginTop:50,fontSize:50,fontWeight: 'bold'}}>Loading data</Text>
        </View>
      )
    }
    else {
      let craftArray = Object.keys(this.state.spaceCraftData).map(craftData => {
        return this.state.spaceCraftData[craftData]
      })
      let spaceCrafts = [].concat.apply([],craftArray)

      spaceCrafts.sort(function(a,b) {
        a.agency.founding_year - b.agency.founding_year
      })
      console.log("SpaceCrafts: "+spaceCrafts)
      spaceCrafts.slice(0,10)
      return(
        <View>

        </View>
      )
    }
  }
}
loveb123 回答:即使调用 API 一次,如何修复状态 429 错误?

你能不能稍微改变一下你的 componentDidMount 函数:

componentDidMount = () => {
  if (!Object.keys(this.state.spaceCraftData).length) {
    this.getSpaceCraftData();
  }
}

您的 axios 调用无限重复的原因是因为您更新了 getSpaceCraftData 函数内的状态,因此触发了组件的重新渲染。当组件再次挂载时,它会再次执行 getSpaceCraftData 函数并再次更新状态,依此类推。

通过添加一个只有在没有数据时才执行函数的条件,那么你应该结束执行。然而,这不是一个完整的解决方案,因为您还需要存储错误状态,并且条件也应该测试是否没有错误。如果遇到错误,您仍然会陷入无限循环,因为将没有数据并且获取过程可能总是失败。

本文链接:https://www.f2er.com/313.html

大家都在问