我有一些互惠互利的方法,我希望其中一个可以在另一个方法之后开始,但是它并不能完全按照我想要的方式工作。在另一个问题中,我在正常方法中使用了async和await,但是我没有设法使用Google APIS和嵌套函数。
async componentDidMount() {
await this.getCityList();
console.log(this.state.cities)
await this.currentLocation();
await this.getVenueInformation();
}
此时,第一个函数可以正常工作,并且在传递所需的函数后,将转到第二个方法。同样,我必须将第二种方法的输入放到第三种方法中,但失败了。
Current location method:
currentLocation() {
Geocoder.init(...);
Geolocation.getCurrentPosition((position) => {
this.getCurrentLoc(position.coords.latitude, position.coords.longitude),
this.setState({
region: {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
},
error: null,
});
}, (error) => this.setState({ error: error.message }), { enableHighAccuracy: false, timeout: 200000, maximumAge: 1000 });
}
我想用上述方法确定我的位置,然后用getcurrentloc方法获取地址信息,并计划根据该信息显示附近的一些地方。但是,我无法使该系统按顺序工作,我的地址始终为空。
getCurrentLoc(lat, longt) {
Geocoder.from(lat, longt)
.then(json => {....
this.setState({...},
this.getLocIDS(cityName, districtName, neighborhoodName)
);
})
.catch(error => console.warn(error));
}
这时,我通过地址从数据库中获取地址以提取id信息。
getLocIDS(cityName, districtName, neighborhoodName) {
let link = ..;
fetch(link)
.then(response => response.json())
.then(res => {
this.setState({,,,,,,})
})
.catch(error => console.warn(error));
}
最后,我想捕获场地信息,但是此时数据在数据库中输入为-1。 -1是我的初始状态值。我确定所有方法都可以正常工作,但是由于这些进程没有按顺序运行,因此我的空间搜索方法可以在更新以前功能状态的数据之前起作用。
getVenueInformation() {
let link = ...
fetch(link)
.then(response => response.json())
.then(venues => {
this.setState({
markers: venues,
isLoading: false,
})
})
};
数据库输入返回:>>>>> SELECT * FROM mekanlar WHERE mekanlar.mahalle_no="-1";
答案 0 :(得分:0)
您没有显示如何将信息从一种方法传递到另一种方法。
如果使用this.state
进行操作,那就是问题所在。
this.setState
将不会同步更新状态。因此,在下一个函数调用中,this.state
中的值可能不正确。
为确保数据流正确,更有意义的是显式返回值,即使您在内部执行setState
。
async componentDidMount() {
const cityList = await this.getCityList();
console.log(cityList)
const location = await this.currentLocation(cityList);
const venueInformation = await this.getVenueInformation(location);
}