2017-08-20 2 views
1

dies ist mein Code:

 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) 
     } 

Die erste $ http.get ("http://localhost:5000") eine Liste von Details zurück, die ich in dem Rest des Codes verwenden, was interessiert uns ist die Variable numSerie.

Je nach dem Wert von numSerie, weiteren $ http.get ("data/tempsgammes.json") wird die Zeit für diese numSerie aus einer JSON-Datei ausgeführt werden zu extrahieren.

Das Problem ist, ich kann nicht auf den $ scope.time nur im zweiten Aufruf für $ http zugreifen. Die erste console.log() gab mir das gewünschte Ergebnis, aber die zweite undefined.

Kann mir jemand helfen?

Antwort

2

Bearbeiten: Die console.log ($ scope.time) wird 2 mal aufgerufen. Sie sehen, dass der erste den richtigen Wert gibt und der zweite nicht. Es ist wegen des asynchronen Verhaltens von "dann". Es ist nicht intuitiv, aber das zweite console.log ($ scope.time) wird aufgerufen, bevor das "then" beendet ist, deshalb zeigt es "undefined".

Edit 2: Versuchen Sie, die im Anschluss an die Ausführungsreihenfolge auf asynchrone Operationen scope.time überall

$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 

Ja, Sie $ Sonde verwenden können, aber wenn Sie versuchen, es zu verwenden, unten der „dann ", es wird noch nicht definiert. Sie können irgendwo in der Ansicht setzen {{$ scope.time}} und sondieren, dass es außerhalb des http.get $ definiert werden


Wenn Sie undefined erhalten, ist wahrscheinlich, dass der Index der res.data [ $ scope.numSerie] ist außerhalb der Grenzen.

Überprüfen Sie zuerst, ob Sie einen Fehler mit den Entwicklertools Ihres Browsers haben. $ scope.numSerie scheint hier der Übeltäter zu sein, überprüfen Sie seinen Wert oder bieten Sie mehr Details

+0

alles ist in Ordnung und die res.data [$ scope.numSerie] ist nicht außerhalb der Grenzen, $ scope.numSerie es ist kein Täter Auch $ scope.numSerie hat den gewünschten Wert. Das einzige Problem ist, dass ich die $ scope.time nicht aus $ http.get() –

+0

Oh, ich verstehe. Wenn Sie console.log ($ scope.Time) aufrufen, wird der asynchrone Aufruf noch ausgeführt. Setzen Sie console.log ($ scope.Time) in das innere http $ .get() und Sie sollten den Wert sehen. – zameb

+0

Ich weiß, dass ich den Wert im Inneren sehe, ich möchte es außerhalb verwenden –

Verwandte Themen