异步函数未在android上返回

Posted

技术标签:

【中文标题】异步函数未在android上返回【英文标题】:Async function not returning on 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函数中使用 【参考方案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】:

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

【讨论】:

以上是关于异步函数未在android上返回的主要内容,如果未能解决你的问题,请参考以下文章

推送通知未在 android 上显示

NDK 未在 android studio 中配置问题

Kotlin 协程Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )

Kotlin 协程Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )

OTP 未在 Android 设备上发布

Android OnLongClickListener 未在 MapView 上触发