2013-08-30 39 views
0

我的服務看起來像角異步數據檢查問題

//this mthod under myService 
this.checkCookie = this.getAuthorization = function() { 
    return $http({ 
     method: 'GET', 
     url: '/api/auth' 
    }); 
} 

而在我的路由配置我做喜歡

MyAPP.config(function($routeProvider) { 
    $routeProvider. 
    when('/', { 
     controller: check 
    }). 

    when('/login', { 
     templateUrl: '/partials/login.html', 
     controller: check 


    }). 
    when('/products', { 
     templateUrl: '/partials/products.html' 
    }) 
}); 

var check = function($location, myService, $q) { 
     if (myService.checkCookie()) { 
      $location.path("/products"); 
     } else { 
      $location.path("/login"); 
     } 
    }; 

與GET請求我要檢查服務器生成有效會話數據或不。瀏覽器會在'/ api/auth'中發送'GET'時發送cookie信息。

問題是當我打電話this.checkCookie我沒有得到響應syncronoulsy asnyc時尚角回報響應。取決於checkCookie響應,我想重定向到'/ products',但現在我無法做到這一點。

我該怎麼做?我需要更改以獲取this.checkCookie並檢查響應狀態是200還是500?

回答

0

您不能使用$http做同步請求。爲了處理該請求的承諾回報,你可以這樣做:

var check = function($location, myService, $q) { 
    myService.checkCookie() 
    .success(function() { 
    $location.path("/products"); 
    }) 
    .error(function() { 
    $location.path("/login"); 
    }) 
}; 
0

你必須調用then上這是一個從$http返回的承諾:

myService.checkCookie().then(function() { 
    $location.path("/products"); 
}, function() { 
    $location.path("/login"); 
}); 

第一個功能是成功的處理程序,第二個是錯誤(拒絕)處理程序。