我的代碼是:javascript函數響應延遲
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval) {
myvarible = responceval;
})
console.log(myvarible); // output is 0
我怎樣才能解決我的問題?我認爲,雖然它返回響應代碼console.log首先運行。請幫我解決問題。
我的代碼是:javascript函數響應延遲
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval) {
myvarible = responceval;
})
console.log(myvarible); // output is 0
我怎樣才能解決我的問題?我認爲,雖然它返回響應代碼console.log首先運行。請幫我解決問題。
假設這依賴於瀏覽器的地理定位功能,您不能「修復」這個問題。這是異步編碼的本質。
在您的函數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();
});
如果我理解正確的,之前console.log(myvarible);
運行geLocations()
的回報,這就是爲什麼你得到myvariable
的舊值。
試試這個:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval){
myvarible = responceval;
console.log(myvarible);
})
這意味着你必須把所有的myvariable
的相關代碼內的getLocations()
回調函數。
由於Sirko解釋,你必須把你登錄到回調函數,像這樣:
var myvarible = "0";
wialon.util.Gis.getLocations(coordsc,function(code,responceval){
myvarible = responceval;
console.log(myvarible); // output will be responceval
});
請添加一些情況下,代碼和對問題的描述。 –
如果你描述你的問題是**,如果你想要我們的建議如何解決它,這將有所幫助。 –