2017-12-30 27 views
0

ich eine Taste, die vier Funktionen mit ihm verbunden hat:javascript/AngularJS - Reihenfolge der Funktionsaufrufe

 <button type="button" data-dismiss="modal" data-toggle= "modal" href="#booking" class="btn btn-success" ng-click="createResource(); cancelFirstModal(); confirmNumberOfBooking(); showSecondModal(); " >Create Bookings</button> 

auf ng-click, createResource() ist zuerst genannt werden, dann confirmNumberOfBookings() aber meine Konsolenausgabe in Safari sagt etwas anderes :

console log

$scope.createResource = function() { 
     console.log('create is called'); 
     $http.post('/api/v1/resource', $scope.newResource).then(function (response) { 
      console.log('post is called'); 
     }); 
    }; 

    $scope.confirmNumberOfBooking = function(){ 
     //$scope.numberOfBookings = 3; 
     console.log('confirm is called'); 
     $scope.newResource.booking = [ 
      { 
       startDateTime: "datetime", 
       endDateTime: "datetime" 
      } 
     ]; 

     for(var i = 0; i < $scope.newResource.numberOfBookings; i++){ 
      $scope.newResource.booking.push({startDateTime: "datetime",endDateTime: "datetime"}); 
     } 
    }; 

Meine Frage ist, warum zuletzt erhalten genannt wird $http.post? Es wird technisch vor confirmNumberOfBookings() erklärt.

Antwort

0

Reihenfolge des Anrufs ist nicht, wie es in der Konsole berichtet oder ausgegeben wird.

$ http.post wird direkt nach console.log aufgerufen ('create is called').

$ http.post gibt eine Promise zurück, die in ein Antwortobjekt aufgelöst wird, wenn die Anfrage erfolgreich ist oder fehlschlägt. Daher erhalten Sie die Ausgabe "Post wird aufgerufen" nur, wenn die Zusage aufgelöst ist und nicht die Reihenfolge des Aufrufs angibt.

Lassen Sie mich wissen, wenn Sie sich noch nicht sicher sind.

+0

das macht Sinn! Gibt es eine Möglichkeit, 'confirmNumberOfBookings()' aufzurufen, bevor das Versprechen gelöst wird? – asus

+0

Ja, es gibt meinen Vorschlag, nur eine Funktion bei ng-click aufzurufen und den Fluss in dieser Funktion oder der Logik zu steuern, anstatt vom Fluss mit ng-click-Funktionsreihenfolge abhängig zu sein. Also zum Beispiel ng-click = "bookingConfirmation" $ scope.bookingConfirmation =() => {// createResource call wenn möglich mach es ein Versprechen, wenn Versprechen gelöst ist dann nur 2.Funktion aufrufen und so weiter. } –

+0

Kommt auch darauf an, ob Ihre Funktionen synch oder async Funktionen sind. Wenn sie Synchronisierungsfunktionen sind, können Sie sich auf die Reihenfolge verlassen, in der sie aufgerufen werden, aber wenn sie nicht sicherstellen, dass Sie Versprechungen verwenden, so dass nur der nächste Schritt ausgeführt wird und es sinnvoll ist, die nächste Funktion aufzurufen. Überprüfen Sie diese Geige zum Beispiel. http://jsfiddle.net/perdeepOsingh/bu0ooz6b/2/ –

Verwandte Themen