[英]gelocation - asynchronous callback not working with error - Javascript
myFn.getMyCurrentPosition(data,function(data){//異步調用,需要像回調一樣使用數據-本節不起作用,如何使用當前位置坐標並將其用於其他函數(如成功回調)中?
var myFn = {
this.localVar : null,
mysuccess : function (position) {
this.myLocalVar = position.coords.latitude + ','+ position.coords.longitude;
return this.myLocalVar;
},
myerror : function (error) {
return null;
},
getMyCurrentPosition : function() {
if(navigator && navigator.geolocation) {
//WORKS - mysuccess sets data asyncrhonously.
return navigator.geolocation.getCurrentPosition(this.mysuccess, this.myerror);
}
},
myInitializer : function(){
//Initialize map, marker etc. for google maps API
myFn.getMyCurrentPosition( function(){ //Async call, need to use data like a callback
//This code never runs!
if(this.myLocalVar){
//doSomethingAfterCall - using this.myLocalVar, map, etc.;
}
});
}
}
更新:嘗試此:
var myFn = {
mysuccess: function (position) {
myFn.myInitializer();
},
myerror: function (error) {
myFn.myInitializer();
},
myInitializer : function(){
//Initialize map, marker etc. for google maps API
},
onLoadSet : function(){
navigator.geolocation.getCurrentPosition(this.mysuccess, this.myerror);
}
}
myFn.onLoadSet();
得到此錯誤:無法在“地理位置”上執行“ getCurrentPosition”:作為參數1提供的回調不是函數。
調用myFn.getMyCurrentPosition
,將向其傳遞兩個參數( data
和函數)。
定義時:
function() {
您沒有告訴它接受任何參數(也沒有使用arguments
對象)。
如果您想對它們進行任何處理,則需要實際使用傳遞給它的參數。
嘗試類似新的Permission API的方法
我已經構建了它的擴展版本/ polyfill,並支持請求和查詢地理位置的狀態,這一切都應運而生: browser-su
/***************
* query *
***************/
su.query({
name: 'geolocation'
}).then(permission => {
console.log(permission) // {state, onchange}
console.log(permission.state) // granted, prompt or denied
})
/***************
* request *
***************/
su.request({
name: 'geolocation',
timeout: 5000 // Optional
}).then(position => {
console.log(position)
} err => {
console.log(err.name, err.message)
// RequestDeniedError User blocked access to geolocation
// RequestDismissedError User dismissed access to geolocation
// RequestTimeoutError Timeout expired
// RequestUnavailableError Position is unavailable
// RequestUnsupportedError This client dose not seem to have geolocation support
})
Firefox也將很快支持撤銷權限
這是有效的。 我嘗試了另一種方法,但是可能在語法上弄亂了某些內容。 這有兩個問題:JS需要在成功/錯誤回調中為myInitializer調用引用變量myFn.method而不是this.method。 因為locationSuccess / error是預期的回調,所以this.locationSucess在getcurrentPosition的回調中起作用。
var myFn = {
locationSuccess: function (position) {
myFn.myInitializer(position.coords);
},
locationError: function (error) {
myFn.myInitializer();
},
myInitializer : function(data){
//Initialize map, marker etc. for google maps API
//if(data) { doSomething(); }
//else { doSomethingElse(); }
},
onLoadSet : function(){
navigator.geolocation.getCurrentPosition(this.locationSucess, this.locationError, {timeout:1000});
}
};
myFn.onLoadSet();
另一個問題是已知的:將超時作為第三個參數添加到
navigator.geolocation.getCurrentPosition(this.locationSuccess, this.locationError, {**timeout:1000**});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.