[英]React Native set flow of functions calls
我写了这段代码
componentDidMount(){
Geolocation.getCurrentPosition(info => {
console.log(info.coords.latitude + " " + info.coords.longitude)
this.setState({coords: {latitude: info.coords.latitude, longitude: info.coords.longitude, latitudeDelta: this.LATITUDE_DELTA, longitudeDelta: this.LONGITUDE_DELTA}})
}, error => Alert.alert('Error', JSON.stringify(error)),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000});
console.log(this.state.coords.latitude + " " + this.state.coords.longitude);
region = getapi(this.state.coords.latitude, this.state.coords.longitude)
this.setState({region})
console.log("TEMP: " + region);
hot = getHotBarb(this.state.region)
this.setState({hot})
rated = getRatedBarb(this.state.region)
this.setState({rated})
offer = getOfferBarb(this.state.region)
this.setState({offer})
this.setState({loading: false})
}
但是在日志控制台上,我首先看到 this.state.coords.latitude + " " + this.state.coords.longitude (未定义)的日志和 getCurrentPosition 调用中的日志(正确)。 问题是我不能调用函数 getapi 因为 this.state.coords.latitude, this.state.coords.longitude 结果未定义 我需要先设置this.state.coords.latitude
和this.state.coords.longitude
然后调用componentDidMount()
的其他函数。
如何在其他函数之前调用 getCurrentPosition 函数上的 setState ?
试试这个方法
callApi(){
console.log(this.state.coords.latitude + " " + this.state.coords.longitude);
region = getapi(this.state.coords.latitude, this.state.coords.longitude)
this.setState({region})
console.log("TEMP: " + region);
hot = getHotBarb(this.state.region)
this.setState({hot})
rated = getRatedBarb(this.state.region)
this.setState({rated})
offer = getOfferBarb(this.state.region)
this.setState({offer})
this.setState({loading: false})
}
getCurrentPosition(){
Geolocation.getCurrentPosition(info => {
console.log(info.coords.latitude + " " + info.coords.longitude);
this.setState({coords: {latitude: info.coords.latitude, longitude: info.coords.longitude, latitudeDelta: this.LATITUDE_DELTA, longitudeDelta: this.LONGITUDE_DELTA}},
() => this.callApi(); // call api here
)
}, error => Alert.alert('Error', JSON.stringify(error)),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000});
}
componentDidMount(){
this.getCurrentPosition();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.