繁体   English   中英

控制器不等待解决

[英]Controller doesn't wait for resolve

我有解决的方法,但是控制器似乎在完成之前就已运行。

    $stateProvider.state('index', {
        url: '/',
        templateUrl: '/angular/general/index.general.html',
        resolve: {
            data: function(currentUser){
                currentUser.resolveLogin();
            }
        },
        controller: ['$state', 'currentUser', function($state, currentUser){
            console.log('3');
            if (currentUser.bLoggedIn()){
                $state.go('index.dashboard');
            }
        }]
    });

在currentUser中

    this.resolveLogin = function(){
        var deferred = $q.defer();
        console.log('1')
        $http.get('/profile')
        .success(function(res){
            console.log('2.1')
            root.user = res.data;
            deferred.resolve();
        })
        .error(function(res){
            console.log('2.2')
            deferred.reject();
        });

        // return promise object
        return deferred.promise;
    }

而不是以1、2.1、3的顺序登录,而是以1、3、2.1的顺序登录。

您会忘记来自resolve函数的返回承诺,因此angular不应等待它。

因此,如果currentUser.resolveLogin(); 退货承诺,你应该只退货

resolve: {
    data: function(currentUser){
        return currentUser.resolveLogin();
    }
},

旁注: $http已经返回诺言,因此,您无需手动创建它,并且可以将this.resolveLogin减少为类似这样的内容

this.resolveLogin = function(){
    console.log('1')
    return $http.get('/profile')
    .success(function(res){
        console.log('2.1')
        root.user = res.data;
    })
    .error(function(res){
        console.log('2.2')
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM