Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 不使用状态获取设备纬度和经度_Reactjs_React Native - Fatal编程技术网

Reactjs 不使用状态获取设备纬度和经度

Reactjs 不使用状态获取设备纬度和经度,reactjs,react-native,Reactjs,React Native,在我的操作文件夹(使用redux)中,我想获取设备位置,以便使用它查询firestore,我的代码返回未定义的。我不确定我的错误是从哪里来的。你知道如何在不将设备存储在我的状态下获取设备位置吗 const myCoord = navigator.geolocation.getCurrentPosition(position => { const { latitude, longitude } = position.coords; const LatLong

在我的操作文件夹(使用redux)中,我想获取设备位置,以便使用它查询firestore,我的代码返回未定义的。我不确定我的错误是从哪里来的。你知道如何在不将设备存储在我的状态下获取设备位置吗

const myCoord = navigator.geolocation.getCurrentPosition(position => {
        const { latitude, longitude } = position.coords;
        const LatLong = {
            'lat': latitude,
            'long': longitude
        }
        return LatLong
    });

由于getCurrentPosition未立即完成,因此未定义。这是一个异步函数。例如,您可以创建一个承诺,该承诺将在getCurrentPosition成功时得到满足,在出现错误时被拒绝

下面是我如何实现这一点的:

    const myCoord = () =>
  new Promise((resolve, reject) => {
    const geoSuccess = position => resolve(position);
    const geoFailure = error => reject(error);

    navigator.geolocation.getCurrentPosition(
      geoSuccess,
      geoFailure,
      geoOptions
    );

    const geoOptions = {
      timeout: 5000,
      maximumAge: 5000,
      enableHighAccuracy: false
    };

  });
然后您需要使用“then”或“async”调用

我建议阅读有关将回调变为承诺的内容

从这个网站上引用最能描述你的问题

在理想情况下,所有异步函数都将返回 承诺。不幸的是,有些API仍然期望成功和/或失败 要以旧方式传递的回调。最明显的例子是 setTimeout()函数


由于getCurrentPosition未立即完成,因此未定义。这是一个异步函数。例如,您可以创建一个承诺,该承诺将在getCurrentPosition成功时得到满足,在出现错误时被拒绝

下面是我如何实现这一点的:

    const myCoord = () =>
  new Promise((resolve, reject) => {
    const geoSuccess = position => resolve(position);
    const geoFailure = error => reject(error);

    navigator.geolocation.getCurrentPosition(
      geoSuccess,
      geoFailure,
      geoOptions
    );

    const geoOptions = {
      timeout: 5000,
      maximumAge: 5000,
      enableHighAccuracy: false
    };

  });
然后您需要使用“then”或“async”调用

我建议阅读有关将回调变为承诺的内容

从这个网站上引用最能描述你的问题

在理想情况下,所有异步函数都将返回 承诺。不幸的是,有些API仍然期望成功和/或失败 要以旧方式传递的回调。最明显的例子是 setTimeout()函数


你使用expo还是bare project?@DominikTargosz我使用expo你使用expo还是bare project?@DominikTargosz我使用expo