So stornieren Sie $ resource-Anfragen

Ich versuche herauszufinden, wie die Timeout-Eigenschaft einer $ -Ressource verwendet wird, um ausstehende Anforderungen dynamisch zu stornieren. Idealerweise möchte ich nur Anfragen mit bestimmten Attributen stornieren können (basierend auf den gesendeten Parametern), aber es scheint, dass dies möglicherweise nicht möglich ist. In der Zwischenzeit versuche ich nur, alle ausstehenden Anforderungen zu stornieren und dann das Timeout-Versprechen zurückzusetzen, um neue Anforderungen zuzulassen.

Das Problem scheint zu sein, dass die $ resource-Konfiguration nur eine einzige statische Zusage für den Timeout-Wert zulässt. Es ist sinnvoll, wie ich dies tun könnte, wenn ich einzelne $ http-Aufrufe tätige, da ich nur neue Versprechungen für die Zeitüberschreitung abgeben könnte, aber wie kann dies für eine $ resource funktionieren? Ich habe hier einen Beispiel-Plunker eingerichtet:http://plnkr.co/edit/PP2tqDYXh1NAOU3yqCwP?p=preview

Hier ist mein Controller-Code:

app.controller('MainCtrl', function($scope, $timeout, $q, $resource) {
  $scope.canceller = $q.defer();
  $scope.pending = 0;
  $scope.actions = [];
  var API = $resource(
    'index.html', {}, {
      get: {
        method: 'GET',
        timeout: $scope.canceller.promise
      }
    }
  )

  $scope.fetchData = function() {
    if ($scope.pending) {
      $scope.abortPending();
    }
    $scope.pending = 1;
    $scope.actions.push('request');
    API.get({}, function() {
      $scope.actions.push('completed');
      $scope.pending = 0;
    }, function() {
      $scope.actions.push('aborted');
    });
  }

  $scope.abortPending = function() {
    $scope.canceller.resolve();
    $scope.canceller = $q.defer();
  }
});

Im Moment funktioniert der Abbruch, wenn eine Anforderung aussteht, aber ich kann sie anscheinend nicht zurücksetzen. Sobald eine Anforderung abgebrochen wird, werden auch alle zukünftigen Anforderungen abgebrochen.

Ich bin mir sicher, dass mir etwas fehlt, da es für die meisten Webanwendungen (zumindest die von mir erstellten) von entscheidender Bedeutung ist, ausstehende Anforderungen stornieren zu können.

Vielen Dank

Antworten auf die Frage(6)

Ihre Antwort auf die Frage