首页 > 解决方案 > 无法删除 Expo Location.watchPositionAsync()

问题描述

我希望能够跟踪应用程序中某些功能的用户位置,但我希望用户能够根据需要关闭位置。我一直在用expo-location它来查找用户的位置、请求权限和其他各种事情。但是当我使用 watchPositionAsync 时,当用户关闭该功能时,我无法将其删除。我阅读了文档,它说我可以使用 remove() 但是当我尝试这样做时出现以下错误:

Unhandled promise rejection: TypeError: client.location.remove is not a function. (In 'client.location.remove()', 'client.location.remove' is undefined)

作为参考,客户端只是一个全局对象,它为用户存储一些设置(这样我就不必一遍又一遍地获取它)。

客户端.js

let client = {
   user: {},
   location: null
};

跟踪.js

import * as Location from 'expo-location';

export async function startTracking(client){
    console.log('Starting tracking')
    if(!client.location){
        client.location = Location.watchPositionAsync({
            accuracy: Location.Accuracy.Highest,
            distanceInterval: 1,
            timeInterval: 5000,
        }, (loc) => {
            console.log(loc)
        });
    }
}


export async function stopTracking(client){
    console.log('Remove tracking')
    await client.location.remove();
}

更多信息:

标签: javascriptreact-nativeexpo

解决方案


您没有等待函数 watchPositionAsync 返回的对象。

返回一个解析为订阅对象的承诺,该对象有一个字段

我拿这个来源

试试这个代码。

import * as Location from 'expo-location';

export async function startTracking(client){
    console.log('Starting tracking')
    if(!client.location){
        client.location = await Location.watchPositionAsync({
            accuracy: Location.Accuracy.Highest,
            distanceInterval: 1,
            timeInterval: 5000,
        }, (loc) => {
            console.log(loc)
        });
    }
}


export async function stopTracking(client){
    console.log('Remove tracking')
    await client.location.remove();
}


推荐阅读