【发布时间】:2018-10-17 19:04:45
【问题描述】:
我遇到了一个异步函数的问题,它在 Android 上运行时没有返回,而在 iOS 上运行时却正常返回。
这是函数:
_getLocationAsync = async () => {
let {status} = await Permissions.askAsync(Permissions.LOCATION);
if (status !== 'granted') {
this.setState({
errorMessage: 'Permission to access location was denied',
});
}
let location = await Location.getCurrentPositionAsync({});
this.setState({location});
return location;
};
我在这里的另一个函数中使用它:
async fetchMarkers(settings ){
console.log("fetchMarkers");
// console.log(settings);
this.setState({listLoading: true});
let location = await this._getLocationAsync();
console.log("location is ", location);
....
....
}
此行在 android 中没有返回,但在 ios 中返回。在 android 中,我尝试在 _getLocationAsync 中返回它之前记录位置的值,它记录了一个已定义且正确的对象,我想知道为什么它没有返回它:
let location = await Location.getCurrentPositionAsync({});
我正在使用 React Native 0.53
【问题讨论】:
-
与您的问题无关,但是您是否意识到如果未授予状态,您仍然会尝试 getCurrentPositionAsync?
-
好收获!我也会解决这个问题
-
奇怪的是它会在 iOS 设备上返回,而不是在 Android 设备上。但是,既然您是在成功获取后设置位置状态,为什么不通过状态访问它呢?
await Location.getCurrentPositionAsync({}); let location = this.state.location -
@K.Wu 我的理由是,由于 setState 是异步的,我不能保证在我尝试在第二个函数中访问它之前会设置该位置,但如果我等待结果,我可以保证返回的值是最新的
-
@A.Wali 那么你也可以在
await this.setState({ location })_getLocationAsync函数中使用
标签: javascript react-native async-await react-native-android