2017-06-06 58 views
0

因此,基本上我使用$ routeProvider中的resolve來獲取當前用戶的信息,然後實例化控制器。 這是我要做的事:路由時未能正確解析Promise

userMan.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider.when('/userManagement', { 
     templateUrl: 'userManagement/userManagement.html', 
     controller: 'userManCtrl', 
     resolve: { 
      myUser:function($http){ 
       console.log("I am about to make the call"); 
       $http.get("/irods-cloud-backend/searchByMetadata/getCurrentUser").then(function(result) { 
        console.log(result.data); 
        return result.data; 
       }, 
       function(result) { 
        alert("Unable to find any users! Please try again..."); 
       }) 
      } 
     } 
    }); 
}]); 

我控制器還看起來是這樣的:

userMan.controller('userManCtrl', ['$scope', '$log', '$http', '$location', 'myUser', 
function($scope, $log, $http, $location, myUser){ 

    var currUser = myUser; 

基本上我的錯誤是,currUser是不確定的。這可以防止我檢查用戶的權限等。 我也用:

$scope.$on('$routeChangeSuccess',function(event, current){ 
     alert("loaded!!"); 
    }); 

時看到這個承諾是解決了,但我只要我裝入標籤看到警報消息。 然後我試圖用一個假返回對象單純的喜歡

return { someAttr: 'val'}; 

這個功能就好了..我知道它不是一個承諾,但這樣做的目的理智..

的錯誤任何線索?

回答

1

您不會從myUser方法返回,所以沒有什麼可以等待,但undefined。正如@JoelCDoyle所評論的:

您的解決方法必須返回一個承諾。 $ http方法返回一個承諾。

resolve: { 
     myUser:function($http){ 
      // return here! 
      return $http.get("/irods-cloud-backend/searchByMetadata/getCurrentUser").then(function(result) { 
       console.log(result.data); 
       return result.data; 
      } 
+0

對不起,您可以擴展一下嗎?如果我刪除了返回語句,我該如何訪問它? var currUser = myUser會工作嗎? –

+0

你的解決方法必須返回一個承諾。 '$ http'方法返回一個承諾。 –

+0

嗨,我仍然不確定如何使用由$ http返回的承諾,整點就是獲取當前用戶。我假設currUser = myUser會允許我使用$ http調用返回的對象。但myUser未定義.. –

0

從@JoelCDoyle和@baao反饋後,我用了不同的方法。 我只是創建了一個處理GET請求並在我的解決方案中使用它的服務。 更多關於此可查看here