Функция Async не возвращается на Android
У меня возникла проблема с функцией async, которая не возвращается при запуске на 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
Ответы
Ответ 1
Я думаю, есть некоторые причины, по которым Android не может найти место.
Я использую этот параметр местоположения, anh он хорошо работает на android
// how accuracy should get location be
const GET_LOCATION_OPTIONS = {
enableHighAccuracy: false,
timeout: 20000,
maximumAge: 1000,
};
navigator.geolocation.getCurrentPosition(
(position) => {
const location = {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
};
if (callback) { callback(location); }
},
(err) => {
if (callback) { callback(null); }
},
GET_LOCATION_OPTIONS,
);
Ссылка: https://facebook.github.io/react-native/docs/geolocation.html
Ответ 2
попробуйте использовать его таким образом
let location = await Location.getCurrentPositionAsync({ enableHighAccuracy:false});
Местоположение отслеживается только в том случае, если режим дорожки местоположения находится в режиме высокой точности или экономии заряда батареи
Ответ 3
возможно, это проблема разрешения, проверьте, действительно ли приложение применяет разрешающую позицию