2016-08-31 6 views
0

配列のデータは返されますが、関数onSuccessonErrorのデータは返されません。私は必要なものの配列javascriptにデータを渡す

function onSuccess(position) { 
    alert('Latitude: '   + position.coords.latitude   + '\n' + 
      'Longitude: '   + position.coords.longitude   + '\n' + 
      'Altitude: '   + position.coords.altitude   + '\n' + 
      'Accuracy: '   + position.coords.accuracy   + '\n' + 
      'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' + 
      'Heading: '   + position.coords.heading   + '\n' + 
      'Speed: '    + position.coords.speed    + '\n' + 
      'Timestamp: '   + position.timestamp    + '\n'); 
} 
function onError(error) { 
    alert('code: ' + error.code + '\n' + 
      'message: ' + error.message + '\n'); 
} 
navigator.geolocation.watchPosition(onSuccess, onError, { timeout: 30000 }); 

例:

geolocation = navigator.geolocation.watchPosition(null, null, { timeout: 30000 }); 
if(!geolocation.error) 
     alert(geolocation.coords.latitude); 

プラグイン:https://github.com/apache/cordova-plugin-geolocation

+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-非同期呼び出し) – vlaz

+0

私の場合の例は見つかりませんでした。私を説明できますか? –

+0

例はありません。あなたが求めている方法でjavascriptが動作しないことを説明しています。あなたは非同期の心のセットからそれに来る必要があります。 – adrianj98

答えて

0

私はあなたが直線的に実行するようにコードをしたいと思い、あなたの質問から推測します。しかし、それはできません。コードブロックが実行され、最終的にロケーションが到着し、コールバックが呼び出されます。しかし、それは異なる時間(数ミリ秒のカウントでさえ)と異なるスタックトレースで起こります。これが非同期Javascriptの仕組みです。

このコンセプトに精通していない場合は、そのテーマに関する記事を読んでください。参考までに、あなたのコードをPromiseコードに翻訳しました。これは、非同期に役立つ最高のテクニックの1つです。

new Promise(function(resolve, reject) { 
    navigator.geolocation.watchPosition(resolve, reject, { timeout: 30000 }); 
}) 
.then(function(location) { 
    console.log(location.coords.latitude); 
}) 
.catch(function (error) { 
    console.log('code: ' + error.code + '\n' + 
     'message: ' + error.message + '\n'); 
}); 

ところで、自分に好意を行うと、console.logを使用しています。 alert()は2000年代だから! :)

関連する問題