首页 文章

路由时,Promise无法正确解析

提问于
浏览
0

所以基本上我在$ 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 回答

  • 1

    你不能等待,但是 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;
                }
    
  • 0

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

相关问题