我的代码是:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval) {
myvarible = responceval;
})
console.log(myvarible); // output is 0
我如何解决我的问题?我认为,当它返回响应代码时,console.log首先运行。请帮助解决我的问题。
答案 0 :(得分:3)
假设这依赖于浏览器的地理位置功能,则无法“修复”此问题。这是异步编码的本质。
在您的函数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();
});
答案 1 :(得分:0)
如果我理解正确,console.log(myvarible);
会在geLocations()
返回之前运行,这就是您获得myvariable
旧值的原因。
试试这个:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval){
myvarible = responceval;
console.log(myvarible);
})
这意味着您必须将myvariable
的所有相关代码放在 getLocations()
回调函数中。
答案 2 :(得分:0)
正如Sirko解释的那样,你必须将你的日志记录放入回调函数中,如下所示:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval){
myvarible = responceval;
console.log(myvarible); // output will be responceval
});