如何为数组返回数据,而不是为onSuccess
和onError
函数返回数据?
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);
答案 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.log
。 alert()
已经是2000年了! :)