javascript函数响应延迟

时间:2012-10-17 10:38:00

标签: javascript function

我的代码是:

var myvarible = "0";

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

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

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

3 个答案:

答案 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 
});