2017-08-20 6 views
1

これは私のコードです:

 var updateScreen = function() { 
      $http.get("http://localhost:5000").then(function(response){ 
      $scope.numSerie = response.data.refDetail.Num_Serie; 

      $http.get("data/tempsgammes.json").then(function(res){ 
      $scope.time = res.data[$scope.numSerie].temps; 
      console.log($scope.time) 
      }) 

     console.log($scope.time) 
     } 

最初の$ http.get(「http://localhost:5000」)はどのような、私は、コードの残りの部分で使用詳細のリストを返します。変数はnumSerieです。 numSerie、別の$ http.get( "データ/ tempsgammes.json")の値に応じ

は、JSONファイルからこのnumSerieため時間を抽出するために実行されます。

問題は、私は$ scope.timeへのアクセスを$ httpの2回目の呼び出しでしか得ることができないということです。最初のconsole.log()は私に希望の結果を与えましたが、もう1つはが定義されていませんです。

誰でも手伝ってもらえますか?

答えて

2

を編集します。console.log($ scope.time)が2回呼び出されています。あなたは最初のものが正しい値を与えているのを見て、2番目のものはそうでないことを見ます。 "then"の非同期動作が原因です。これは直感的ではありませんが、 "then"が終了する前に2番目のconsole.log($ scope.time)が呼び出されています。これが "未定義"を示す理由です。

編集2

$http.get("data/tempsgammes.json").then(function(response){ 
    alert('first');  // <--- This will be called first 
    .then(function(res){ 
     alert('third!'); // <--- This will be called third 
}); 
alert('second!');  // <--- This will be called second 

はい、あなたはどこでも$のscope.timeを使用することができますが、あなたは「その後の怒鳴るそれを使用しようとした場合の非同期操作に実行順序を調べるために、以下を試してみてください"、それはまだ定義されません。あなたはあなたのビュー{{$のscope.time}}のどこかに入れて、あなたが未定義取得する場合、それは$ http.getの外


定義されることを調べることができますres.dataのインデックスいる可能性があります[ $ scope.numSerie]が範囲外です。

まず、ブラウザの開発ツールを使用してエラーが発生していないかどうかを確認します。 $ scope.numSerieはここでの犯人と思われ、値を確認したり、詳細を指定したりします

+0

res.data [$ scope.numSerie]は範囲外ではありませんが、scope.numSerieは原因ではありませんあまりにも$ scope.numSerieが望ましい値を持っています。唯一の問題は$ http.get()から$ scope.timeを使用できないことです。 –

+0

ああ、わかります。あなたがconsole.log($ scope.Time)を呼び出すと、非同期呼び出しはまだ進行中です。内部http $ .get()にconsole.log($ scope.Time)を入れて、値を確認します。 – zameb

+0

私は内側の値を参照して、私はそれを外側に使用したいと知っています –

関連する問題