如何在AngularJs中停止正在进行的http请求

时间:2016-04-19 08:09:24

标签: angularjs

我的Api服务:

var sites = array['test','about','try'];
var element = 'other';

我的BookService:

app
        .factory('apiService', apiService);

    apiService.$inject = ['$http'];

    function apiService($http) {

        return {
            get: _get,
            post: _post
        };

        function _get(url, config) {
            return $http.get(url, config);
        }

        function _post(url, data, config) {
            return $http.post(url, data, config);
        }
    }

我的控制器:

app
        .factory('bookService', bookService);

    bookService.$inject=['SERVER_CONSTANT','BOOK_CONSTANT','apiService'];

    function bookService(SERVER_CONSTANT,BOOK_CONSTANT,apiService) {

        return {
            getLowestOnlinePrice:_getLowestOnlinePrice
        }
        function _getLowestOnlinePrice(isbn){
            return apiService.get("......");
        }
    }

我必须停止正在进行的http请求。当我打印承诺时,他们打印为function doSearch(data){ angular.forEach($scope.bookSearchResult,function(book){ book.lowestOnlinePricePromise = bookService.getLowestOnlinePrice(book.bookIsbn).then(function(response){ ... }).catch(function(response){ ... }); }); } function onClick(){ angular.forEach($scope.bookSearchResult,function(resultBook){ console.log(resultBook.lowestOnlinePricePromise); //prints as Promise Object }); angular.forEach($scope.bookSearchResult,function(resultBook){ resultBook.lowestOnlinePricePromise.resolve(); // Shows Error resolve is not a function }); } 对象。现在如何阻止他们?我没有在Promise上使用$q.defer()。我不确定什么是最好的方法。尝试apiService,但显示resolve()。需要帮助。

我使用的是1.4.5版本

感谢建议。

1 个答案:

答案 0 :(得分:2)

制作GET& POST

中的apiService功能如此
        function _get(url, config) {
            var defer = $q.defer();

            var promise = $http.get(url, { timeout: defer.promise});

            promise.abort = function(reason){
                defer.resolve(reason);
            };

            return  promise;
        }

然后在控制器上:

function doSearch(data){
        angular.forEach($scope.bookSearchResult,function(book){
              (book.lowestOnlinePricePromise = 
                  bookService.getLowestOnlinePrice(book.bookIsbn)).then(function(response){
                                ...
                   }).catch(function(response){
                                ...
                   });
       });
}

function onClick(){

        angular.forEach($scope.bookSearchResult,function(resultBook){
                resultBook.lowestOnlinePricePromise.abort(); 

            });
}

在该解决方案中,abort()添加了 promise 功能。然后在控制器上保存唯一承诺

再看一遍

(book.lowestOnlinePricePromise = bookService.getLowestOnlinePrice(book.bookIsbn)).then()

只要需要,只需拨打abort()功能。

找到了帮助:http://www.bennadel.com/blog/2616-aborting-ajax-requests-using-http-and-angularjs.htm