Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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
Javascript Location.watchPositionAsync未将状态设置为位置_Javascript_React Native_Geolocation_Expo - Fatal编程技术网

Javascript Location.watchPositionAsync未将状态设置为位置

Javascript Location.watchPositionAsync未将状态设置为位置,javascript,react-native,geolocation,expo,Javascript,React Native,Geolocation,Expo,Im使用expo location在更新时监视我的用户位置 尤其是Location.watchPositionAsync(选项,回调)函数 它输出正确的位置,但没有使用setLocation location正在返回以下内容: Object { "remove": [Function remove], } setLocation和location存储在上下文提供程序中 我的代码如下: App.js useEffect(() => { con

Im使用expo location在更新时监视我的用户位置

尤其是
Location.watchPositionAsync(选项,回调)
函数

它输出正确的位置,但没有使用
setLocation

location
正在返回以下内容:

Object {
  "remove": [Function remove],
}
setLocation
location
存储在上下文提供程序中

我的代码如下:

App.js

    useEffect(() => {
        console.log('hi')
        _getLocationAsync = async () => {
            let { status } = await Permissions.askAsync(Permissions.LOCATION)
            if (status !== 'granted') {
                console.log('debieeed')
            }
            let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Balanced, timeInterval: 10000, distanceInterval: 1 }, (loc) => setLocation(loc.coords));
            console.log(locations)
           
        }
        _getLocationAsync()
    }, [])

我修复了我的问题,只需制作一个返回位置的深度副本

如果我的逻辑错误,请纠正我

我改变了这个

let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Balanced, timeInterval: 10000, distanceInterval: 1 }, (loc) => setLocation(loc.coords));
           
对此

let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Lowest,  distanceInterval: 2000 }, loc => setLocation(JSON.parse(JSON.stringify(loc.coords))));

其中,
JSON.parse(JSON.stringify(loc.coords))
正在制作位置数据的深度副本

我只需制作返回位置的深度副本,就解决了我的问题

如果我的逻辑错误,请纠正我

我改变了这个

let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Balanced, timeInterval: 10000, distanceInterval: 1 }, (loc) => setLocation(loc.coords));
           
对此

let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Lowest,  distanceInterval: 2000 }, loc => setLocation(JSON.parse(JSON.stringify(loc.coords))));

其中,
JSON.parse(JSON.stringify(loc.coords))
正在制作位置数据的深度副本

我在使用
watchPositionAsync()获取任何位置时遇到了同样的问题

似乎有一个bug(或者它是这样设计的,idk)必须将精度设置为高才能获取位置对象。它不适用于其他精度选项(因为它也不适用于默认值)

let location=wait location.watchPositionAsync(
{准确度:位置。准确度。高},
(loc)=>{console.log(loc)}

);使用
watchPositionAsync()

似乎有一个bug(或者它是这样设计的,idk)必须将精度设置为高才能获取位置对象。它不适用于其他精度选项(因为它也不适用于默认值)

let location=wait location.watchPositionAsync(
{准确度:位置。准确度。高},
(loc)=>{console.log(loc)}

);您需要阅读世博会网站上的文档

返回解析订阅对象的承诺,该订阅对象只有一个字段:remove(function)——不带参数调用此函数以删除此订阅。将不再为位置更新调用回调

watchPositionAsync
的第二个参数要求一个回调函数,该函数接收一个
LocationObject

回调(函数)——在每次位置更新时调用此函数。它接收LocationObject类型的对象作为第一个参数


传递给回调的
LocationObject
是您希望设置的状态。

您需要阅读世博会网站上的文档

返回解析订阅对象的承诺,该订阅对象只有一个字段:remove(function)——不带参数调用此函数以删除此订阅。将不再为位置更新调用回调

watchPositionAsync
的第二个参数要求一个回调函数,该函数接收一个
LocationObject

回调(函数)——在每次位置更新时调用此函数。它接收LocationObject类型的对象作为第一个参数


传递给回调的
LocationObject
是您希望在状态中设置的对象。

如何停止获取位置更新?如何停止获取位置更新?