我使用AngularJS和$ q来保证,我对用法感到困惑,如何解决这个保证?

我想在调用isLoggedInPromise()或“AUTH_REQUIRED”时返回用户。

谢谢!

    function isLoggedInPromise() {
        $q.when(userWithAllData()).then(function(user) {
            return user;
        });
        $q.when(userWithAllData()).reject(function() {
            return "AUTH_REQUIRED";
        });
    }

    function userWithAllData(){
        var deferral = $q.defer();

        var query = new Parse.Query(Parse.User);
        query.include(["info", "info.rank", "privateInfo"]);
        query.get(Parse.User.current().id).then(function (loadedUser){
            deferral.resolve( loadedUser );
        });

        return deferral.promise;
    }

最佳答案

您想要做的是在promise拥有实际上需要返回的所有数据时,在promise上调用resolve函数。

在一个返回 promise 的函数中,将“resolve”视为实际的return语句。

因此您的isLoggedInPromise函数也需要返回一个Promise,这将使其变得多余。到那时,任何需要用户的东西都必须等待。
isLoggedInPromise().then(function(result){...etc...}, function(reason){//auth needed})
如果仍然需要isLoggedin函数,则它应该看起来像

 function isLoggedInPromise() {
    var isLoggedIn = userWithAllData().then(
        function(user) {
            return user;
        },
        function(reason){
            return $q.reject("AUTH_REQUIRED")
        });
 }

当然,您还必须在userWithAllData函数中包含一些拒绝逻辑。

10-04 21:30