Javascript Cordova:如何将多个onSuccess值解析为一个函数
我正在编写一个html/js脚本,其中包含三个onSuccess例程,分别来自Javascript Cordova:如何将多个onSuccess值解析为一个函数,javascript,function,cordova,geolocation,Javascript,Function,Cordova,Geolocation,我正在编写一个html/js脚本,其中包含三个onSuccess例程,分别来自navigator.compass.watchHeading、navigator.geolocation.watchPosition和navigator.accelerator.watchAcceleration 我想解析所有三个onSuccess值,比如positionLat=position.coords.latitude等转换到另一个函数以执行进一步操作 实现这一点的最佳/快速方法是什么?是否可以在不影响脚本的情
navigator.compass.watchHeading
、navigator.geolocation.watchPosition
和navigator.accelerator.watchAcceleration
我想解析所有三个onSuccess值,比如positionLat=position.coords.latitude当其中一个函数发生更改时,将代码>等转换到另一个函数以执行进一步操作
实现这一点的最佳/快速方法是什么?是否可以在不影响脚本的情况下从这三个函数调用相同的函数?如果调用函数,如何将其他值解析为函数?是的,您可以对所有3个调用使用相同的成功和错误回调:
简单方法
在onSuccess
中,您可以获得不同的对象结构,因此很容易从何处获得它:
function onSuccess(obj) {
if(obj.coords !== undefined){/* ... */} //position
else if(obj.x !== undefined){/* ... */} //acceleration
else if(obj.magneticHeading !== undefined) {/* ... */} //compass
}
回程方式
但我相信这样会更清楚:
var watchIdAcceleration = navigator.accelerometer.watchAcceleration(
function(data){
onSuccess("accelerometer", data);
}, onError, accelerationOptions);
var watchIdPosition = navigator.geolocation.watchPosition(
function(data){
onSuccess("geolocation", data);
},onError,geolocationOptions);
//...
因此,在onSuccess
回调中,我们可以按类型使用switch
:
function onSuccess(type, obj) {
switch (type) {
case "geolocation":
// obj.magneticHeading
break;
case "accelerometer":
//...
break;
default:
//.. not supported
}
}
好的,谢谢,所以当我只想在这三个都成功的情况下运行函数时,像if(obj.coords!==未定义&&obj.x!==未定义&&obj.magneticeReading!==未定义){/*…*/}(从您的第一个答案)这样的解决方案应该是?@Harry一点也不。每个订阅在不同的时间返回自己的数据。他们不是一下子来的,而是随机来的。如果您想在一个回调中捕获所有内容,我将使用Promise.all
:
function onSuccess(type, obj) {
switch (type) {
case "geolocation":
// obj.magneticHeading
break;
case "accelerometer":
//...
break;
default:
//.. not supported
}
}