0

nicht abbrechen Nach dem Versuch, einige Lösungen wie folgt: Aborting ngResource using a promise object Ich bin nicht in der Lage, eine Anfrage mit $ Ressource abgebrochen. Mein letzter Versuch mit dieser war:

Controller:

angular.module('theApp') 
    .controller('homeController', function ($q, foodTypeFactory) { 
    var vm = this; 

    vm.testButton = function() { 
     vm.aborter = $q.defer(); 
     foodTypeFactory(vm.aborter).getTest({}, function (data) { 
     console.log(data); 
     }); 
    }; 
    vm.cancelButton = function() { 
     vm.aborter.resolve(); 
    } 
    }); 

foodTypeFactory:

angular.module('theApp') 
    .factory('foodTypeFactory', function ($resource, BACKEND_API) { 
    return function (aborter) { 
     return $resource(BACKEND_API + '/api/foodtypes/:id', {id: '@id'}, { 
     getTest: { 
      timeout: aborter.promise 
     } 
     }); 
    } 
    }); 

Sobald der Antrag gestellt wird vervollständigt, auch wenn ich versuche, es zu löschen. Ich benutze Angular 1.6.2 mit Angular-Ressource 1.6.2.

Was mache ich falsch?

Antwort

0

Schließlich fand ich eine Lösung! Von eckigen 1.5 $ Ressource kann mit $ cancelRequest() abgebrochen werden. In meinem Fall:

Controller:

angular.module('theApp') 
    .controller('homeController', function (foodTypeFactory) { 
    var vm = this; 

    vm.testButton = function() { 
     vm.onGoingRequest = foodTypeFactory.getTest({}, function (data) { 
     console.log(data); 
     }); 
    }; 
    vm.cancelButton = function() { 
     vm.onGoingRequest.$cancelRequest(); 
    } 
    }); 

foodTypeFactory:

angular.module('theApp') 
    .factory('foodTypeFactory', function ($resource, BACKEND_API) { 
     return $resource(BACKEND_API + '/api/foodtypes/:id', {id: '@id'}, { 
     getTest: { 
      cancellable: true 
     } 
     }); 
    }); 
0

Was ich vorschlagen Ihnen einen http-Interceptor zu verwenden ist .. das können Sie eine Anfrage stoppen ... somthing wie folgt aus:

1) Erstellen Sie eine Datei wie (auth.interceptor.js:

"use strict"; 

angular 
.module("demo") 
.factory('authInterceptorService', ['$q', '$location', 'localStorageService', 
function ($q, $location, localStorageService) { 
    // Public Method 
    return { 
     request: function (config) { 
      config.headers = config.headers || {}; 

      if(!MYCONDITION){ //<-- you can here your logic to test if conitnue request flow or not 
      return; //<-- TERMINATE IT .. 
      }else{ 
      return config; //<-- CONTINUE WITH NORMAL REQUEST 
      } 


     } 
    }; 
}]); 

2) in Ihrer app.config.js Datei:

$httpProvider.interceptors.push("authInterceptorService"); 

dann in alle Ihre Anfrage (über $ http oder über $ resource) diese Logik anwenden ist ... hier können Sie auch die setzen Injektion des Träger-Tokens, wenn du n eed es

Hoffe, es hilft Ihnen

+0

Ich brauche die Anfrage einmal getan wird, um abzubrechen. Mit diesem Ansatz kann ich die Anfrage nur abbrechen, bevor sie erledigt ist. – Roomm

+0

Entschuldigung ... aber wenn es fertig ist ... wie kann man es abbrechen? .... –

+0

Wenn Sie möchten, können Sie die Antwort abfangen .. immer in der Datei, die ich schrieb .. und nicht zurück .. wenn Sie Bedingung nicht übereinstimmt –

Verwandte Themen