-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 に答える