1. 程式人生 > >angualrjs 配置超時時間

angualrjs 配置超時時間

... eject 註冊 res cep param http switch https

timeout 1


本想通過$httpProvider的defaults屬性配置timeout時間, defaults中沒有這個屬性.
https://docs.angularjs.org/api/ng/provider/$httpProvider#defaults

timeout 2


在攔截器中為request的config配置timeout, 在response中根據xhrStatus=timeout來處理超時. 奈何response中沒找到這個xhrStatus
技術分享圖片

官網裏說status=-1表示請求被取消, timeout時就會取消請求, 那就用這個來判斷吧
https://docs.angularjs.org/api/ng/service/$http#$http-returns
技術分享圖片


技術分享圖片

代碼


(function() {

  angular.module("mobile")

    .factory(‘HttpInterceptor‘, [‘$q‘,
      function($q) {
        return {
          request: function(config) {
            // 設置超時時間, 毫秒
            config.timeout = 1;

            if (config.url.search("service/") < 0)
              return config;
            if (localStorage.getItem(‘token‘)) {
              config.params = config.params || {};
              config.params[‘token‘] = localStorage.getItem(‘token‘);
              config.params[‘t‘] = new Date().getTime();
            }
            return config;
          },
          requestError: function(err) {
            return $q.reject(err);
          },
          response: function(res) {
            console.log(‘res: ‘,res);

            if(res.statusText==‘timeout‘)
            {
              console.log(‘timeout: ‘,111);
            }
            if (res.data && res.data.code) {
              switch (res.data.code) {
                case ‘000‘:
                  return res
                case ‘100‘:
                  // alert(res.data.msg)
                  // 賬號未註冊
                  localStorage.removeItem(‘token‘);
                  localStorage.removeItem(‘groupid‘);
                  return res
                case ‘200‘:
                  // session 無效
                  console.log(res.data.msg)
                  localStorage.removeItem(‘token‘);
                  localStorage.removeItem(‘groupid‘);
                  window.location.href = ‘‘;
                  break
              }
            }

            return res
          },
          responseError: function(err) {
            if (-1 === err.status) {
              // 請求超時
              alert(‘請求超時‘);
            } else if (500 === err.status) {
              // 處理各類自定義錯誤
            } else if (501 === err.status) {
              // ...
            }
            return $q.reject(err);
          }
        };
      }
    ])

    .config([‘$httpProvider‘,
      function($httpProvider) {
        $httpProvider.interceptors.push(‘HttpInterceptor‘);
      }
    ])

})();

angualrjs 配置超時時間