gpt4 book ai didi

react-native - 在RN中获取当前用户坐标的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-04 05:28:34 25 4
gpt4 key购买 nike

我想创建一个函数来获取用户坐标,但我发现我不确定我的方法是否足够好。
我想知道其他人如何编写这个函数来工作 在 ios 和 android 上 100% 确定 .
现在我有这样的事情:

function getUserLocation(callback: func) {
Permissions.check('location')
.then(response => {
if (response == 'authorized') {
navigator.geolocation.getCurrentPosition(
(location) => {
callback({
latitude: location.coords.latitude,
longitude: location.coords.longitude
}, response);
},
(error) => {
callback(null);
},
Platform.OS === 'android' ? null : {enableHighAccuracy: true, timeout: 100000, maximumAge: 1000}
);
} else {
callback(null, response);
}
})
}

所以你可以看到我想使用这个函数,所以调用者可以知道是否允许使用位置以及是否获取当前坐标。
我正在尝试的是学习如何:
1. 将这样的函数设为 等待 .
2. 其他人如何实现这样的功能( 对于两个操作系统 )并且工作 100% 相同。

最佳答案

你的问题有两个部分

1. Make function like this to be awaitable.



这可以通过为您提供如何做的逻辑来直接回答。 Awaitable 只不过是实际的异步函数或返回 promise 的东西。如果你想 async那么你需要先制作 getCurrentPosition 的版本它返回一个 promise 。可以像下面这样完成
function getCurrentLocation(options) {
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(resolve, ({code, message}) =>
reject(Object.assign(new Error(message), {name: "PositionError", code})),
options);
});
};

PS:致 https://stackoverflow.com/a/44439358/2830850对于上面的代码

现在你可以像下面这样重写你的代码
async function getUserLocation() {
let response = await Permissions.check('location')
let options = Platform.OS === 'android' ? null : {enableHighAccuracy: true, timeout: 100000, maximumAge: 1000}

if (response == 'authorized') {
return await getCurrentLocation(options)
}

return null;
}

如果你不想去 promise方式如下
function getUserLocation() {
return new Promise((resolve, reject) => {
Permissions.check('location')
.then(response => {
if (response == 'authorized') {
navigator.geolocation.getCurrentPosition(
(location) => {
resolve({
latitude: location.coords.latitude,
longitude: location.coords.longitude
});
},
(error) => {
reject(error);
},
Platform.OS === 'android' ? null : { enableHighAccuracy: true, timeout: 100000, maximumAge: 1000 }
);
} else {
resolve(null);
}
})
});
}

这里的一个关键点与回调不同,promise 解析单个值,这意味着您需要使用对象来返回多个参数。

2. How others make function like this (for both OS) and to work 100% same.



这就是您的问题变得固执己见的地方,我可能会采取一些不同的方法,您可能会做其他事情,而另一个人可能会做完全不同的事情。但我仍然会讨论一些可能性。

拆分成多个函数
function getUserLocation() {
if (Platform.OS === 'android')
{
return getUserLocationAndroid();
} else {
return getUserLocationIOS();
}
}

维护键值对

您可以拥有基于操作系统自动绑定(bind)功能的代码。
Utils = {
getFunction(name) {
if ((name + Platform.OS) in this)
return this[name + Platform.OS]
return this[name];
}
getLocation: function() {}
//getLocationandroid: function() {}
}

因此,默认情况下,您将拥有 getLocation为两个操作系统提供服务器,但如果其中一个操作系统代码偏离太多,您将为其创建一个新函数。代码如下所示
Utils.getFunction("getLocation")(...)

一个带有分支的函数

这就是您当前的方法。只要功能易于理解并且有明确的意图,我会坚持这一点

同样,可能还有 10 多种不同的方式可以放在这里,但最终取决于一件事,即更容易维护和理解使用的方式。有些方法也是特定于用例的,您可以根据用例混合多种方法

关于react-native - 在RN中获取当前用户坐标的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50356796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com