-1

我的代码是:

var myvarible = "0";

wialon.util.Gis.getLocations(coordsc,function(code,responceval) {
    myvarible = responceval;
})

console.log(myvarible); // output is 0 

我该如何解决我的问题?我认为当它返回响应代码时,console.log 首先运行。请帮助解决我的问题。

4

3 回答 3

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();
});
于 2012-10-17T10:41:55.987 回答
0

如果我理解正确,在返回console.log(myvarible);之前运行geLocations(),这就是你得到myvariable旧值的原因。

试试这个:

var myvarible = "0";

wialon.util.Gis.getLocations(coordsc,function(code,responceval){
      myvarible = responceval;
      console.log(myvarible);
})   

这意味着您必须将所有myvariable相关代码放入getLocations()回调函数中。

于 2012-10-17T10:44:14.970 回答
0

正如 Sirko 解释的那样,您必须将您的日志记录放入回调函数中,如下所示:

var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval){
    myvarible = responceval;
    console.log(myvarible); // output will be responceval 
});   
于 2012-10-17T10:44:47.803 回答