路由时,Promise无法正确解析

时间:2017-06-06 15:36:38

标签: angularjs

所以基本上我在$ routeProvider中使用resolve,以便在我实例化控制器之前获取当前用户的信息。 我就是这样做的:

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'};

这个功能很好..我知道它不是一个承诺,但出于理智目的而这样做..

错误的任何线索?

2 个答案:

答案 0 :(得分:1)

你没有从myUser方法返回,所以除了undefined之外没有什么值得等待的。正如@JoelCDoyle所评论的那样:

  

您的解决方法必须返回一个承诺。 $ http方法返回一个promise。

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

答案 1 :(得分:0)

在@JoelCDoyle和@baao的反馈之后,我采用了不同的方法。 我只是创建了一个处理GET请求的服务,并在我的决心中使用了它。 有关详细信息,请查看here

相关问题