2015-04-08 39 views
0

我有一个工厂,它的功能是处理重定向状态码。如果它看到状态码是302,它会将页面重定向到登录页面。错误:诺言未定义

app.factory('redirectInterceptor', function($q,$location){ 
    return { 
     responseError : function(response){ 
      return promise.then(
       function success(response) { 
        if(response.status === 302){ 
         alert("success " +response.status); 
         $location.path('/login.html'); 
         return response; 
        } 
        else{ 
         alert("success " +response.status); 
         return response; 
        } 
       }, 
       function error(response) { 
        if(response.status === 302){ 
         alert("error " +response.status); 
         $location.path('/public/login.html'); 
         return $q.reject(response); 
        } 
        else{ 
         alert("error " +response.status); 
         return $q.reject(response); 
        } 
       } 
      ); 
     } 
    } 
}); 

app.config(['$httpProvider',function($httpProvider) { 
    $httpProvider.interceptors.push('redirectInterceptor'); 
}]); 

但是,一旦服务器返回这里302是

Error: promise is not defined

我做了什么错事,但我得到一个错误?

+0

您的代码的第4行的承诺从来没有被定义。 – pixelbits

+0

@pixelbits的含义?我必须添加这个var defer = $ q.defer(); ?然后让它defer.promise.then ..?我一直在寻找可以帮助我的文章,我发现这个https://thinkster.io/egghead/promises – user3714598

+0

我不认为302是错误状态码。错误是4xx和5xx – Chandermani

回答

0

你的代码应该是这样的,你错过了承诺对象

app.factory('myHttpResponseInterceptor', ['$q', '$location', function($q, $location) { 
    return function(promise) { 
     var success = function(response) { 
      if (response.status === 302) { 
       alert("success " + response.status); 
       $location.path('/login.html'); 
       return response; 
      } else { 
       alert("success " + response.status); 
       return response; 
      } 
     }; 

     var error = function(response) { 
      if (response.status == 401) { 
       if (response.status === 302) { 
        alert("error " + response.status); 
        $location.path('/public/login.html'); 
        return $q.reject(response); 
       } else { 
        alert("error " + response.status); 
        return $q.reject(response); 
       } 

      } 

      return $q.reject(response); 
     }; 

     return promise.then(success, error); 
    }; 
}]); 

//Http Intercpetor to check auth failures for xhr requests 
app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push('myHttpResponseInterceptor'); 
}]); 

参考this link

+0

你重写的代码有一个检查是没有意义的“if(response.status == 401){if(response.status === 302)...”甚至考虑到== vs == =比较我不认为它可以是两个......你能解释一下吗? – RonnBlack