Cómo cancelar solicitudes de $ recursos

Estoy tratando de descubrir cómo usar la propiedad de tiempo de espera de un recurso $ para cancelar dinámicamente las solicitudes pendientes. Idealmente, me gustaría poder cancelar las solicitudes con ciertos atributos (según los parámetros enviados), pero parece que esto puede no ser posible. Mientras tanto, solo estoy tratando de cancelar todas las solicitudes pendientes y luego restablecer la promesa de tiempo de espera para permitir nuevas solicitudes.

El problema parece ser que la configuración de $ resource solo permite una única promesa estática para el valor de tiempo de espera. Tiene sentido cómo podría hacer esto si estuviera haciendo llamadas $ http individuales, ya que podría pasar nuevas promesas para el tiempo de espera, pero ¿cómo puede funcionar esto para un recurso $? He configurado un ejemplo de plunker aquí:http://plnkr.co/edit/PP2tqDYXh1NAOU3yqCwP?p=preview

Aquí está mi código de controlador:

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();
  }
});

En este momento, el cancelador funciona cuando hay una solicitud pendiente, pero parece que no puedo restablecerla: una vez que se cancela una solicitud, todas las solicitudes futuras también se cancelarán.

Estoy seguro de que me falta algo, ya que poder cancelar las solicitudes pendientes parece ser una característica bastante crucial de la mayoría de las aplicaciones web (al menos que he creado).

Gracias

Respuestas a la pregunta(6)

Su respuesta a la pregunta