反应本地API获取未获取参数

时间:2019-02-08 09:26:23

标签: javascript reactjs api react-native

我的本​​机代码有问题, 我正在尝试从api网址中获取数据,并且我进行了多次调用。因此,我得到了数据,但是我的上次调用不起作用,我需要来自先前调用的数据并将其传递给我的方法,但这是行不通的。该方法由带有onpress的按钮启动,如果我按一个,则参数为空,但如果我第二次按,则获取参数。

这是我的代码:

_getResults() {
this.setState({ isLoading: true })
defaultStops().then(data => {
  this.setState({ 
    stops: data.data,
    isLoading : false
   })
})
getDepStop(this.depStop).then(data => {
  this.setState({ 
    depStop: data.data[0].name,
    depStopId: data.data[0].id,
    isLoading : false
   })
})
getArrStop(this.arrStop, this.state.depStopId).then(data => {
  this.setState({ 
    arrStop: data.data[0].name,
    arrStopId: data.data[0].id,
    isLoading : false
   })
})
getCompany(this.state.depStopId, this.state.depStop, this.state.arrStopId, this.state.arrStop, this.date).then(data => {
  this.setState({ 
    company: data,
    isLoading : false
   })
})
}

它的getCompany方法没有获得所有先前方法都有效的参数。

这是我的api调用:

export function defaultStops () {
const url = 'https://www.APIURL.com/api/stops/departure?lang=fr'
return fetch(url)
.then((response) => response.json())
.catch((error) => console.error(error))
}

export function getDepStop (text) {
const url = 'https://www.APIURL.com/api/stops/departure?lang=fr&term=' + text + '&q=' + text
return fetch(url)
.then((response) => response.json())
.catch((error) => console.error(error))
}

export function getArrStop (text, depStopId) {
const url = 'https://www.APIURL.com/api/stops/arrival?lang=fr&q=' + text + '&stopId=' + depStopId
return fetch(url)
.then((response) => response.json())
.catch((error) => console.error(error))
}

export function getCompany (depStopId, depStopName, arrStopId, arrStopName, date) {
const url = 'https://www.APIURL.com/api/routes?id=1&depStopId='+depStopId+'&depStopName='+depStopName+'&arrStopId='+arrStopId+'&arrStopName='+arrStopName+'&dateFrom='+date+'&type=bus&currency=EUR'
return fetch(url)
.then((response) => response)
.catch((error) => console.error(error))
}

export function getTicket (depStopId, arrStopId, stopExtDep, stopExtArr, date, companyId) {
const url = 'https://APIURL/api/prices?companyId='+ companyId +'&stopExtDep='+ stopExtDep +'&stopExtArr='+ stopExtArr +'&stopIdDep='+ depStopId +'&stopIdArr='+ arrStopId +'&dateFrom='+ date +'&dateTo=&currency=EUR&k=cbapp'
return fetch(url)
.then((response) => response.json())
.catch((error) => console.error(error))
}

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

好,所以解决方案是在setState之后使用回调:

getArrStop(this.arrStop, this.state.depStopId).then(data => {
  this.setState({ 
    arrStop: data.data[0].name,
    arrStopId: data.data[0].id,
    isLoading : false
   },function(){getCompany(this.state.depStopId, this.state.depStop, this.state.arrStopId, this.state.arrStop, this.date).then(data => {
    this.setState({ 
      company: data,
      isLoading : false
     })
  })})
})