Функция 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

возможно, это проблема разрешения, проверьте, действительно ли приложение применяет разрешающую позицию