2017-02-08 8 views
0

これは、同じURLの前のリクエストの取り消しを処理するhttpインターセプタサービスです。私は、角度データサービスの 'キャッチ'ハンドラに該当する '解決'メソッドを呼び出した後、拒否を処理する際に問題があります。 このキャンセルを意図的にフラグを立てる方法、私のデータサービスはサーバー側でエラーが発生したことを示していませんか?私はこの場合エラーメッセージを表示したくありません。同じURLを使用した意図的なhttpリクエストのAPIリクエストのキャンセル

(function() { 
'use strict'; 

angular 
    .module('common') 
    .factory('abortService', abortService); 

abortService.$inject = ['$q', '$filter']; 

function abortService($q, $filter) { 

    var service = { 
     request: request, 
     }; 
    var error = ""; 
    var currentRequests = []; 

    return service; 


    function request(request) { 

     if (!request.url.includes('api/')) return request; 

     var deferred = $q.defer(); 
     request.timeout = deferred.promise; 

     var existingRequests = $filter('filter')(currentRequests, { url: request.url }, true); 
     existingRequests.forEach(function (request) { 
      request.promiseObj.resolve('intentional_reject');//how to flag as intentional reject?? 
     }); 

     currentRequests.push({ url: request.url, promiseObj: deferred }); 

     return request; 
    } 

};})(); 

そして、ここでは私の角度データサービスメソッドです:

function getBalanceDueSummary(businessPartnerCode) { 
     return $http({ 
      method: "get", 
      url: "/api/BusinessPartnerAPI/GetBalanceDueSummary", 
      params: 
       { 
        businessPartnerCode: businessPartnerCode, 
       } 
     }) 
     .then(complete) 
     .catch(failed); 

     function complete(response) { 
      return response.data; 
     } 

     function failed(error) { //here my cancellation falls into, but i have no data which indicates intentional cancellation 
      //logService.exception displays a toastr message when error occurrs 
      logService.exception(error, 'GetBalanceDueSummary'); 
      return $q.reject(error); 
     } 
    } 
私はいくつかの掘削を行い、オブジェクトに値 'intentional_reject' を発見した

enter image description here

+0

キャンセルのカスタムステータスコードを使用してこれを確認しましたか? http://stackoverflow.com/questions/29356962/angular-js-set-http-status-code-for-cancelled-requests – stackg91

+0

私はそれを今試みました。カスタムステータスコードを受け入れることができませんでした。ステータスが常に-1になります。 – vpetrovic

答えて

0

: error.Config.timeout。 $$ state.value

function getBalanceDueSummary(businessPartnerCode) { 
     return $http({ 
      method: "get", 
      url: "/api/BusinessPartnerAPI/GetBalanceDueSummary", 
      params: 
       { 
        businessPartnerCode: businessPartnerCode, 
       } 
     }) 
     .then(complete) 
     .catch(failed); 

     function complete(response) { 
      return response.data; 
     } 

     function failed(error) { 
      if(!(error.Config.timeout.$$state.value && 
       error.Config.timeout.$$state.value=='intentional_reject')) 
        logService.exception(error, 'GetBalanceDueSummary'); 
      return $q.reject(error); 
     } 
    } 

これは疑問ですこれには最高の解決方法ですが、手動で応答ステータスを設定することはできませんでした。

関連する問題