2016-06-23 1 views
0

Ich versuche, einen Ajax-Aufruf für das Pulsen zu wiederholen, aber mit Intervall manchmal habe ich mehrere Ajax-Anrufe in der Warteschlange wegen Netzwerkproblemen. Wie führe ich einen Ajax-Anruf aus, sondern führe nur den nächsten aus, wenn der erste erfolgreich zurückgelaufen ist. Außerdem möchte ich den Anruf bei Bedarf abbrechen. Die Verwendung von Intervall ist einfach, da ich ClearInterval verwende.Cleanste Art und Weise, Ajax-Ruf in einer seriellen Weise zu wiederholen und bei Bedarf abbrechen zu können?

$scope.intervalLoop = $interval(function() { 
    if ($scope.weAreClear) 
    $scope.initSoftwareUpdate(); 
}, 5000); 
+0

Timeout vs Intervall –

+0

Timeout wird nur einmal – KingKongFrog

+0

laufen Und wenn es fertig ist, können Sie ein anderes starten, was es unmöglich macht damit sie sich anhäufen. –

Antwort

2

Wie bereits angedeutet Sie eine rekursive Funktion können Sie Rückkehr ein $timeout:

$scope.cancelled = false; 

    $scope.recTimeoutFunction = function($scope) { 
    return $timeout(function($scope) { 
     //only start new pulse if user hasn't cancelled 
     if(!$scope.cancelled) 
     { 
     $http(/* pulsing ajax call */) 
      .then(function(res) { 
      //after successful ajax call, start new timeout: 
      $scope.recTimeoutFunction($scope); 
      }) 
     } 
    }, 5000, true, $scope); 
    }; 

    //initially call the timeout function: 
    $scope.recTimeoutFunction($scope); 

    //function for the user to cancel pulsing messages 
    $scope.cancel = function() { 
    $scope.cancelled = true; 
    } 
Verwandte Themen