Ich muss ein Ereignis auslösen, wenn alle meine $ http Anrufe verarbeitet werden. Ich muss auch wissen, ob ein Anruf fehlgeschlagen ist. Ich habe versucht, die verfügbaren Lösungen auf stackoverflow wie mit einem Interceptor zu verwenden.
angular.module('app').factory('httpInterceptor', ['$q', '$rootScope',
function ($q, $rootScope) {
var loadingCount = 0;
return {
request: function (config) {
if(++loadingCount === 1) {
$rootScope.$broadcast('loading:progress');
}
return config || $q.when(config);
},
response: function (response) {
if(--loadingCount === 0) {
$rootScope.$broadcast('loading:finish');
}
return response || $q.when(response);
},
responseError: function (response) {
if(--loadingCount === 0) {
$rootScope.$broadcast('loading:finish');
}
return $q.reject(response);
}
};
}
]).config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push('httpInterceptor');
}]);
jedoch bei diesem Ansatz die $rootScope.$broadcast('loading:finish')
aufgerufen wird, nachdem jeder $ http Anruf beendet ist. Ich möchte ein Ereignis auslösen, wenn alle $ http-Aufrufe beendet sind.
Ich kann $q
nicht verwenden, da die Aufrufe $http
auf meiner Seite zu verschiedenen Direktiven gehören und nicht in demselben Controller aufgerufen werden.
können Sie '$ http.pendingRequests' verwenden. Sie können überprüfen, ob $ http.pendingRequests.length! == 0; – talentedandrew
Sie können einen Dienst erstellen, der all diese $ http-Aufrufe enthält, da $ http Aufrufe return promise, dieser Dienst ist eine Sammlung von Versprechen, also müssen Sie nur schreiben wie: Promise.all (....) – ABOS
@ABOS, Ich werde über Promise.all() lesen und es versuchen. Werde jedoch mit Fragen an Sie zurückkommen! Vielen Dank. – InquisitiveP