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' on' Geolocation':作为参数1提供的回调不是函数。
答案 0 :(得分:2)
当你致电myFn.getMyCurrentPosition
时,你会传递两个参数(data
和一个函数)。
当你定义它时:
function() {
你没有告诉它接受任何论点(你也没有使用arguments
对象)。
如果您想要对它们进行任何操作,您需要实际使用传递给它的参数。
答案 1 :(得分:1)
尝试新的Permission api之类的内容 我已经构建了一个扩展版本/ polyfill,支持request&查询地理位置的状态都是promisify: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也很快会支持撤销权限
答案 2 :(得分:0)
这是有效的。我尝试了另一种方法,但可能在我的语法中弄乱了一些东西。这是几个问题: JS需要在成功/错误回调中为myInitializer调用引用变量myFn.method而不是this.method。因为locationSuccess / error是预期的回调,所以this.locationSucess在getcurrentPosition的回调中工作。
navigator.geolocation.getCurrentPosition(this.locationSuccess, this.locationError, {**timeout:1000**});
另一个问题是:添加超时作为
的第三个参数J4