javascript - 无法删除 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();
}
更多信息:
- 世博版 - 40.0.1
- 安卓版——氧气操作系统 10.5.11
- 反应本机版本 - 0.63.4
- 博览会位置版本 - 10.0.0
- Client.js 的结构比上面的更好...
解决方案
您没有等待函数 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();
}
推荐阅读
- scala - Scala 隐式类必须有一个主构造函数,在第一个参数列表中只有一个参数
- php - 如何在 PHP 中为 HEX 输入数据计算 CRC-CCITT (XModem)?
- python - 如何加入两个相似的数据框并应用条件python vs sql
- python - 解析没有明确(正则表达式)分隔符的 html 表
- windows - 对每个数据包使用 NdisFIndicateReceiveNetBufferLists 还是将它们链接在一起接收?
- postgresql - Postgres 将列值更新为 time.Now()
- javascript - 单击选项卡时替换窗口
- reactjs - 在 React 应用中实现一个全局通用通知组件
- php - 提交php表单后如何返回表单中的填充字段?
- javascript - Draft-js convertFromRaw 方法不会将 fontStyles 应用于从数据库中检索到的格式化文本