2012-10-17 152 views
-1

我的代码是:javascript函数响应延迟

var myvarible = "0"; 

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

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

我怎样才能解决我的问题?我认为,虽然它返回响应代码console.log首先运行。请帮我解决问题。

+0

请添加一些情况下,代码和对问题的描述。 –

+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(); 
}); 
0

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

试试这个:

var myvarible = "0"; 

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

这意味着你必须把所有的myvariable的相关代码getLocations()回调函数。

0

由于Sirko解释,你必须把你登录到回调函数,像这样:

var myvarible = "0"; 
wialon.util.Gis.getLocations(coordsc,function(code,responceval){ 
    myvarible = responceval; 
    console.log(myvarible); // output will be responceval 
});