2016-04-19 11 views
1

マイApiServiceを継続的にHTTPリクエストを停止するには:はどのようにAngularJs

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

マイBookServiceを:

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というオブジェクトとして印刷されます。今それらを止める方法は? apiServiceには$q.defer()を使用しませんでした。私は何が最善の方法であるか分かりません。試しましたresolve()ですが、それはresultBook.lowestOnlinePricePromise.resolve is not a functionを示しています。必要なヘルプ。

私はバージョンアドバイスで1.4.5

感謝を使用しています。

答えて

2

コントローラ上その後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; 
     } 

このようなGET & POST機能を行います。その溶液に

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

関連する問題