簡體   English   中英

使用restangular promises在angularJS中創建服務

[英]creating a service in angularJS, using restangular promises

好的,這讓我發瘋了,基本上我想做的是創建服務來獲取和評估用戶功能,我正在使用WP REST API。 我使用restangular獲取我的JSON數據。

在此階段,我正在測試控制器本身中的功能,但是無論在何處進行測試,無論是在使用this.method的自定義服務中還是在控制器內部,無論是否使用$ scope,結果始終都是不確定的。 我知道我在函數內返回true或false時缺少了某些東西,或者在JS中對promise進行了根本不同的東西。 這是代碼:

    var current_user = parseInt(o2_i18n.user_id),
        currentUserCapabilities,
        capability;

    $scope.currentUserCan = function(capability) {
        if(current_user !== '0') {
            wpAPIResource.one('users').get()
            .then(function(allUsers){
                for (var i = 0; i < allUsers.length; i++) {
                    if ( allUsers[i].id === current_user ) {
                        var currentUserCapabilities = allUsers[i].capabilities;
                        for(var prop in currentUserCapabilities){
                            if (capability === prop) {
                                //$log.log( prop );
                                return prop;
                            } else {
                                //$log.log( prop );
                                return false;
                            }
                        }
                    }
                }
            }, function(reason){
                $log.error(reason);
            });
        } else {
            //The user is not logged in, therefor no capabilities
            return false;
        }
    };

    $log.log($scope.currentUserCan('publish_posts'));

    if ( $scope.currentUserCan('publish_posts') ) {
        $log.log( 'Yes I Can!' );
    } else {
        $log.warn('No Can\'t Do!');
    }

如果current_user !== '0'currentUserCan函數不返回任何內容。 例如,您應該讓它返回一個承諾(對於以下情況,您需要注入$q服務)

$scope.currentUserCan = function(capability) {
    if(current_user !== '0') {
        // note the "return" here
        return wpAPIResource.one('users').get().then(function(allUsers){
            for (var i = 0; i < allUsers.length; i++) {
                if ( allUsers[i].id === current_user ) {
                    var currentUserCapabilities = allUsers[i].capabilities;
                    for(var prop in currentUserCapabilities){
                        if (capability === prop) {
                            return prop;
                        }
                    }
                }
            }
            return false;
        }, function(reason){
            $log.error(reason);
            return $q.reject(reason); // you still want the promise to fail
        });
    } else {
        return $q.resolve(false);
        // this turns the static value into a promise so the API for this
        // function is consistent
    }
};

然后消耗這樣的功能

$scope.currentUserCan('publish_posts').then(function(can) {
    if (can) {
        $log.log('Yes I Can!');
    } else {
        $log.warn("No Can't Do!");
    }
});

我還清理了一下您的循環。 在您的OP中,內部循環沒有意義,如果在allUsers數組中找不到該用戶,則沒有return值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM