2015-01-17 2 views
0

У меня есть угловые услуги отдыха, как этотКак отменить угловой Аякс службы запроса

.factory('Store', [ '$resource', function($resource) { 
     return $resource("/stores/:id/:action.json", { 
      id : "@id", 
      action : "@action", 
      longitude : "@longitude" 
     }); 
    } ]) 

И я называю получить метод в моем контроллере, как это:

Store.get({ 
     id : $stateParams.id, 
     longitude: $rootScope.currentLocation.longitude, 
     latitude: $rootScope.currentLocation.latitude 
    }, function(data) { 
     self.original = data; 
    }, function(error){ 
     $rootScope.$broadcast('ServerUnreachable'); 
    }); 
}; 

Но прежде решить ответ , если пользователь покинул представление, я хочу отменить запрос ajax в моем обратном вызове $ destroy, любая идея?

$scope.$on('$destroy', function() { 
    // how to cancel 
}); 

ответ

2

$resource documentation говорит:

тайм-аут - {номер | Promise} - время ожидания в миллисекундах, или обещание, которое должно прервать запрос когда проблема будет решена.

Таким образом, передать неразрешенное обещание вызова $ ресурсов и, в ваших $ уничтожить функцию обратного вызова, разрешить это неразрешенное обещание отменить запрос:

// create an unresolved canceler 
var canceler = $q.defer(); 
var promiseToPassToResource = canceler.promise; 

// to cancel the http call: 
canceler.resolve('user left page'); 
+0

Спасибо, я нашел этот пример, в котором они проходят отмените функцию createResourceInstance, но я не очень уверен, как передать свой отладчик на мой .factory («Store», ['$ resource', function ($ resource) {? – user1883793

+0

Я никогда не использую ngResource, поэтому я не имеют большой опыт работы с ним. Мне также кажется странным дизайном, чтобы передать одно обещание построить ресурс многократного использования. Думаю, вам придется каждый раз создавать новый ресурс $, а не использовать сингл е. один. –

Смежные вопросы