2017-02-07 2 views
0

Ich arbeite an einem Projekt in Java und ich verwende insbesondere Spring und AngularJS. Beim Laden meiner Seite (ng-init) führe ich eine Funktion aus, die eine $ http-Abfrage aufruft, die die Liste der Umgebungsvariablen abruft. Dann lade immer die Seite, ich rufe eine andere $ http Anfrage, die das Ergebnis meiner ersten Abfrage benötigt.Environnent Variablen im Front-End

Das Problem besteht darin, dass die zweite Abfrage beginnt, bevor die erste Abfrage beendet wird, zu diesem Zeitpunkt ist die Variable environent nicht definiert. Ich habe ein asynchrones Abfrageproblem.

Kennen Sie bitte eine Lösung?

Vielen Dank

+0

Verwenden Sie Versprechen für asynchrone Operationen – MMK

+0

können Sie etwas von Ihrem Code zeigen, soweit ich verstehe, sollten Sie in der Lage sein, nur Ihre zweite $ http in der. Dann anrufen() Block Ihrer ersten $ http – darron614

+0

$ q.all ([firstHttpRequestPromise]). Dann (/ * tun Sie die andere http-Anfrage * /) – MMK

Antwort

0

Verwenden Sie Versprechungen. Machen Sie Ihre erste Funktion async und setzen Sie die zweite Funktion in die .then() der ersten Funktion.

0

Überprüfen Sie die documentation for the $q Service, der die AngularJs (1.x) Implementierung von Promises ist.

Sie haben wahrscheinlich so etwas wie dieses

$http.get('url1') 
    .then(function (response1) { 
     console.log(response1); 
    }); 

$http.get('url2') 
    .then(function (response2) { 
     console.log(response2); 
    }); 

Der Code sollte außerhalb der verketteten .then Anruf auf das Versprechen zurück von $http

$http.get('url1') 
    .then(function(response1) { 
     console.log(response1); 
     return $http.get('url2') 
    }) 
    .then(function(response2) { 
     console.log(response2); 
    }); 

Alles, was in etwa so aussehen nicht garantiert ist (und wahrscheinlich wird nie ausgeführt), nachdem der $http Aufruf zurückgegeben wird.

Wenn Sie Versprechen (oder die weniger häufig verwendeten Rückrufe) nicht verwenden, um den asynchronen Fluss von HTTP Anforderungen/Antworten zu steuern, können Sie nicht garantieren, dass diese Vorgänge in Beziehung zueinander stehen.

0

Hier mein Code, ist das Dokument ein Service und loadDocument eine HTTP-Anfrage zurück:

$http.get('/env').then(function(variables) { 
    Document.loadDocument(variables).then(function (data) { 
      // next code..... 
    }); 
}); 

Wenn loadDocument ausgeführt wird, Variablen ist nicht definiert. Ich verstehe nicht sehr gut die Versprechungen Nutzung ...

Verwandte Themen