在 react-native-geolocation-service 中使用 Promise 从另一个文件获取位置

Posted

技术标签:

【中文标题】在 react-native-geolocation-service 中使用 Promise 从另一个文件获取位置【英文标题】:Getting location from another file using Promise in react native with react-native-geolocation-service 【发布时间】:2021-01-11 11:00:57 【问题描述】:

我正在尝试制作一个辅助函数来获取用户的当前位置,但我的承诺的结果是未定义的。

此功能正在运行,我可以检索我的坐标:

//position.js

async function getCurrentPosition() 
  return new Promise((resolve, reject) => 
    Geolocation.getCurrentPosition(resolve, reject, 
      enableHighAccuracy: true,
      timeout: 15000,
      maximumAge: 10000,
    );
  );


export async function getUserLocation() 
  await request(
    // Check for permissions
    Platform.select(
      android: PERMISSIONS.ANDROID.ACCESS_COARSE_LOCATION,
      ios: PERMISSIONS.IOS.LOCATION_WHEN_IN_USE,
    ),
  ).then((res) => 
    console.log('then');
    // Permission OK
    if (res === 'granted') 
      console.log('granted');
      return getCurrentPosition();
      // Permission denied
     else 
      console.log('Location is not enabled');
    
  );

但是当我在这里调用我的函数时,我得到了 undefined :

import getUserLocation from '../../utils/position';

useEffect(() => 
    getUserLocation()
      .then((res) => console.log(res)) //  undefined 
      .catch((err) => 
        console.error(err.message);
      );
  , []);

我做错了什么?

【问题讨论】:

先尝试使用字符串,例如“Resolved”和“Rejected”,还将您的 Geolocation.getCurrentPosition 添加到 try and catch 块中 我试过你说的但仍然有未定义,即使我尝试传递字符串而不是 position.coords 你用什么平台?真机还是模拟器?因为您的代码与我的 android 模拟器一起工作并返回了一个位置。 IOS 模拟器。但是我也可以在 getCurrentPosition() 函数中获得一个位置,但是当我在我的使用效果中(在另一个文件中)调用它时,我无法获得解析值。那里:.then((res) => console.log(res)) // undefined 如所写,getUserLocation() 不会返回其request(...).then() 承诺。将await 更改为return 【参考方案1】:

正如所写,getUserLocation() 不会返回它的 request(...).then() 承诺。将await 更改为return

另外,您应该真正将console.log('Location is not enabled') 更改为throw new Error('Location is not enabled'),从而允许getUserLocation 的调用者看到错误(如果出现)。

export async function getUserLocation() 
    return request(Platform.select( // Check for permissions
 // ^^^^^^
        'android': PERMISSIONS.ANDROID.ACCESS_COARSE_LOCATION,
        'ios': PERMISSIONS.IOS.LOCATION_WHEN_IN_USE
    ))
    .then((res) => 
        if (res === 'granted')  // Permission OK
            return getCurrentPosition();
         else  // Permission denied
            throw new Error('Location is not enabled'); // Throwing an Error here
                                                        // makes it available to the caller
                                                        // in its catch clause.
        
    );

【讨论】:

以上是关于在 react-native-geolocation-service 中使用 Promise 从另一个文件获取位置的主要内容,如果未能解决你的问题,请参考以下文章

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据