首页 文章

如何检查promise是否返回空对象

提问于
浏览
0

目标是检查用户是否已登录 . 加载页面时,将使用promise来检查当前用户 . 如果用户未登录,则服务器返回 {} . 我的问题是我不知道如何检查promise是否返回空对象 {} .

我定义了一个资源:

myapp.factory('User', function($resource) {
    return $resource('/users/:userId', {userId: '@id'}, {
    current: {method:'GET', params: {userId: 'current'}}});
});

在ui-router中的resolve属性中使用 . 解析用于向控制器提供数据 .

resolve: {
    user: ['User', function(User) {
        return User.current();
    }]
},
controller : function($scope, $window, user) {
    $scope.user = user;

    $scope.userLoggedIn = !isEmptyObject(user);

    function isEmptyObject(obj) {
        console.log(obj);
        var name;
        for (name in obj) {
        return false;
        }
        return true;
    }                                   
}

快速服务器端定义为:

app.get('/users/current', function(req, res) {
    console.log(req.isAuthenticated());
    console.log(req.user);
    if (req.isAuthenticated()) { 
        res.send(req.user);
    } else {
        console.log("Not Authenticated");
        res.send({});
    }
});

问题是 isEmptyObject 函数总是返回true .

1 回答

  • 0

    尝试:

    function isEmptyObject(obj) {
    
           if (obj.length && obj.length > 0)
               return false;          
    
           if (obj.length === 0)
              return true;           
        }
    

    BTW,underscore.js插件有自己的方法:

    isEmpty_.isEmpty(object)
    

    如果object不包含任何值(没有可枚举的自身属性),则返回 true .

    _.isEmpty([1, 2, 3]);
     => false
    
     _.isEmpty({});
     => true
    

相关问题