来自promise

时间:2015-10-10 18:33:42

标签: angularjs promise angular-promise angularjs-resource

我有几个看起来像这样的休息服务

/user/:userId/resource/:resourceId

大多数时候用户想要获得自己的资源(尽管有时候他想获得另一个用户的资源) 所以我希望默认参数是当前用户ID,但是我无法在rootcope / service上保存UserId,因为如果用户刷新浏览器,这将消失,所以我想做这样的事情:

$resource('/user/:userId/resource/:resourceId', { userId: getUserId, resourceId: '@id' })

问题是getUserId()会返回一个承诺:

function getUserId() {
    if (!$rootScope['user']) {
        $rootScope['user'] = UserService.get({ userId: 'current' })
    }
    return $rootScope['user'].$promise.then(function (user) {
        return user.id;
    }
}

如何让它适用于所有服务(现在我只是在userId getter之后总是链接每个资源服务......有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

使用浏览器会话存储此非敏感数据。

// Set the user object into the session as a JSON object
function setUser(user) {
    sessionStorage.setItem("user", JSON.stringify(user));
}

// Retrieve user object and parse the userID
function getUserId() {
    var tmpUser = JSON.parse(sessionStorage.getItem('user'));
    return tmpUser.userID;
}

然后您的$资源将不会返回任何承诺,您可以从代码中的任何位置访问/修改userID,而不会污染您的$ rootScope。