我的代码是:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval) {
myvarible = responceval;
})
console.log(myvarible); // output is 0
我该如何解决我的问题?我认为当它返回响应代码时,console.log 首先运行。请帮助解决我的问题。
我的代码是:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval) {
myvarible = responceval;
})
console.log(myvarible); // output is 0
我该如何解决我的问题?我认为当它返回响应代码时,console.log 首先运行。请帮助解决我的问题。
假设这依赖于浏览器的地理定位功能,您无法“修复”这个问题。它具有异步编码的性质。
在您的函数wialon.util.Gis.getLocations()
中,您传入一个回调。所以在这个调用的(异步)执行之后,你的回调将被执行。
同时执行您的其余代码,这导致console.log(myvarible);
结果为 0。
相应地更改您的编码风格,并将所有依赖于myvarible
回调本身或函数中的代码放在回调中调用。这样,此代码仅在设置后 myvarible
执行。
所以要么:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval){
myvarible = responceval;
// here comes code using myvarible
console.log(myvarible);
});
或者
var myvarible = "0";
function doStuff(){
// here comes code using myvarible
console.log(myvarible);
};
wialon.util.Gis.getLocations(coordsc,function(code,responceval){
myvarible = responceval;
doStuff();
});
如果我理解正确,在返回console.log(myvarible);
之前运行geLocations()
,这就是你得到myvariable
旧值的原因。
试试这个:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval){
myvarible = responceval;
console.log(myvarible);
})
这意味着您必须将所有myvariable
相关代码放入getLocations()
回调函数中。
正如 Sirko 解释的那样,您必须将您的日志记录放入回调函数中,如下所示:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval){
myvarible = responceval;
console.log(myvarible); // output will be responceval
});