Cordova:如何将多个 onSuccess 值解析为函数
Posted
技术标签:
【中文标题】Cordova:如何将多个 onSuccess 值解析为函数【英文标题】:Cordova: how to parse multiple onSuccess values to a function 【发布时间】:2017-09-06 18:28:38 【问题描述】:我正在使用来自navigator.compass.watchHeading
、navigator.geolocation.watchPosition
和navigator.accelerometer.watchAcceleration
的三个 onSuccess 例程编写一个 html/js 脚本。
我想将所有三个 onSuccess 值(如 positionLat = position.coords.latitude;
等)解析到另一个函数,以便在其中一个发生变化时采取进一步行动。
最好/最快的方法是什么?是否可以从所有三个调用相同的函数而不会困扰脚本?如果调用它,如何将其他值解析为函数?
【问题讨论】:
【参考方案1】:是的,您可以对所有 3 个调用使用相同的成功和错误回调:
简单的方法
var watchIdAcceleration = navigator.accelerometer.watchAcceleration(onSuccess,
onError,
accelerationOptions);
var watchIdPosition = navigator.geolocation.watchPosition(onSuccess,
onError,
geolocationOptions);
//...
在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 !== undefined && obj.x !== undefined && obj.magneticHeading !== undefined) /* ... */(来自您的第一个答案)应该是解决方案吗? @Harry 一点也不。每个订阅在不同的时间返回他自己的数据。他们不是一下子来的,而是随机的。如果您想在一个回调中捕获所有内容,我会使用Promise.all
:developer.mozilla.org/en-US/docs/Web/javascript/Reference/…以上是关于Cordova:如何将多个 onSuccess 值解析为函数的主要内容,如果未能解决你的问题,请参考以下文章
为啥 PhoneGap Geolocation onSuccess 从来没有第一次触发?
Cordova geolocation.getCurrentPosition()在调用3次后停止工作
如何使用 Cordova 将动态数据从表单传递到 Firestore?