2012-10-17 150 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 
});