2016-06-15 7 views
0

passieren Ich mache ein Frontend in Angular und Backend in Rails. Im Angular-Bereich sende ich viele http-Anfragen und manchmal müssen diese Anfragen passieren, um sicherzustellen, dass die App ordnungsgemäß funktioniert.Sicherstellen, dass asynchrone Aufrufe in der Reihenfolge in Angular

Basierend auf meiner Forschung verwenden Leute Versprechungen aus diesem Grund. Ist das wahr? Versprichst du, dass einer nach dem Zeitpunkt passiert, an dem die vorherige Aktion vollständig ausgeführt wurde und die Antwort zurück ist?

Schauen wir uns mein Beispiel an.

Ich habe eine Zusage, die Anwendungsobjekt zurückgibt. Wenn es in localStorage nicht vorhanden ist, ruft meine App den Remote-Server ab.

ApplicationModule.get = function() { 

      if (!localStorage.application) { 
       return Restangular.all('session').one('user').get().then(function (response) { 
        application = { 
          "id": response.current_application_id, 
          "user_id": response.id, 
          "_type": response.current_type 
         } 
        localStorage.setItem("application", JSON.stringify(application)); 
        return application 
       }); 
      } else { 
       return $q.resolve(JSON.parse(localStorage.application)); 
      } 
    } 

    return ApplicationModule; 
}]); 

In meinem anderen Controller verwende ich Funktion in folgender Weise. Ich muss im Grunde Antwort von ApplicationModule.get() erhalten und diese als Parameter in der nächsten Funktion somefunction verwenden.

 ApplicationModule.get().then(function (response) { 
      somefunction(response); 
     }) 

Was ich neugierig bin, ist, dass, wenn ich Versprechen verwenden, wird somefunction() immer nach return Restangular.all('session').one('user').get().then(function (response) in ApplicationModule.get erfolgt aufgerufen wird()?

Antwort

0

Wenn Sie jquery's $.ajax verwenden, gibt es bereits eine Promise zurück, die Sie seine then Methode verwenden können.

Nichtsdestotrotz sind Promises nicht zum Ordnen von Dingen gedacht, sondern für asynchrone Berechnungen, es ist einfach ein Zufall, dass AJAX asynchron ist (beachten Sie das "A") und daher ist es logisch $.ajax, ein Versprechen abzugeben.

Sie können verkettet werden, so dass, wenn das erste erfolgreich ist, das Ergebnis an das zweite weitergegeben wird und so weiter, aber das ist nicht ihre Hauptverwendung.

Ihre Hauptanwendung ist asynchrone Berechnung und die then Methode existiert, weil Sie manchmal eine andere asynchrone Operation mit dem Ergebnis der ersten durchführen müssen.

Wenn Sie synchrone Berechnungen bestellen müssen, sollten Versprechungen nicht verwendet werden, in Ihrem Anwendungsfall, obwohl es die perfekte Idee ist.

+0

Also, Versprechen wird für den Zweck der multiplen asynchronen Computing verwendet, wenn es etwas mit dem vorherigen Ergebnis zu tun hat, richtig? Und ich mache es richtig, richtig? – JoHksi

+0

Ja, du machst das Richtige, wenn man bedenkt, dass Ajax asynchron ist, Versprechen können aber auch für eine Berechnung verwendet werden – niceman

Verwandte Themen