将数据传递给数组javascript

时间:2016-08-31 22:17:59

标签: javascript jquery cordova

如何为数组返回数据,而不是为onSuccessonError函数返回数据?

function onSuccess(position) {
    alert('Latitude: '          + position.coords.latitude          + '\n' +
          'Longitude: '         + position.coords.longitude         + '\n' +
          'Altitude: '          + position.coords.altitude          + '\n' +
          'Accuracy: '          + position.coords.accuracy          + '\n' +
          'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + '\n' +
          'Heading: '           + position.coords.heading           + '\n' +
          'Speed: '             + position.coords.speed             + '\n' +
          'Timestamp: '         + position.timestamp                + '\n');
}
function onError(error) {
    alert('code: '    + error.code    + '\n' +
          'message: ' + error.message + '\n');
}
navigator.geolocation.watchPosition(onSuccess, onError, { timeout: 30000 });

我需要的例子:

geolocation = navigator.geolocation.watchPosition(null, null, { timeout: 30000 });
if(!geolocation.error)
      alert(geolocation.coords.latitude);

插件:https://github.com/apache/cordova-plugin-geolocation

1 个答案:

答案 0 :(得分:0)

我想你的问题是,你希望你的代码能够线性执行。但它不能。执行代码块,然后最终到达位置并调用回调。但它发生在不同的时间(甚至几毫秒计数)和不同的堆栈跟踪。这就是异步Javascript的工作原理。

如果您不熟悉这个概念,那么您应该阅读一些有关该主题的文章。为了您的参考,我已将您的代码翻译成Promise代码,这是帮助异步性的最佳技术之一。

new Promise(function(resolve, reject) {
  navigator.geolocation.watchPosition(resolve, reject, { timeout: 30000 });
})
.then(function(location) {
  console.log(location.coords.latitude);
})
.catch(function (error) {
  console.log('code: '    + error.code    + '\n' +
        'message: ' + error.message + '\n');
});
顺便说一句,帮自己一个忙,并使用console.logalert()已经是2000年了! :)