2016-08-31 33 views
0

如何为数组返回数据而不是函数onSuccessonError?什么,我需要将数据传递给数组javascript

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

+0

可能重复[如何返回来自异步调用的响应?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-异步调用) – vlaz

+0

我没有发现我的案例。你能解释我吗? –

+0

没有例子。这是解释说,JavaScript不工作的方式,你问。你需要从一个异步的思维集中来解决它。 – adrianj98

回答

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年的! :)