【问题标题】:Async function not returning on android异步函数未在android上返回
【发布时间】: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


【解决方案1】:

我认为 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】:

    可能是权限问题, 检查应用是否确实应用了职位许可

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-22
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2018-03-12
      相关资源
      最近更新 更多