簡體   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