Javascript 如何解决$q的承诺?

Javascript 如何解决$q的承诺?,javascript,angularjs,parse-platform,angular-promise,Javascript,Angularjs,Parse Platform,Angular Promise,我使用AngularJS和$q来表示承诺,我对用法感到困惑,我如何修复这个承诺 我想在调用isLoggedInPromise()或“需要身份验证”时返回用户 谢谢 function isLoggedInPromise() { $q.when(userWithAllData()).then(function(user) { return user; }); $q.when(userWithAllData()).reje

我使用AngularJS和$q来表示承诺,我对用法感到困惑,我如何修复这个承诺

我想在调用isLoggedInPromise()或“需要身份验证”时返回用户

谢谢

    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上调用resolve函数

在返回承诺的函数中,将“resolve”视为实际的返回语句

所以您的isLoggedInPromise函数也需要返回一个promise,这会使它变得多余。任何需要用户的东西都必须通过等待

isLoggedInPromise()。然后(函数(结果){…等..},函数(原因){//auth needed})

如果您仍然需要isLoggedin函数,那么它应该如下所示

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

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

在不需要的时候,您似乎在包装承诺