将数据传递给数组javascript

Pass data to array javascript

本文关键字:数组 javascript 数据      更新时间:2023-09-26

如何为数组返回数据,而不是为函数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

我猜从你的问题,你希望你的代码线性执行。但事实并非如此。执行代码块,然后最终到达位置并调用回调。但是它发生在不同的时间(甚至几毫秒计数)和不同的堆栈跟踪中。这就是异步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年代!:)