Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在angularJS中使用restangular承诺创建服务_Javascript_Angularjs_Restangular_Wordpress Rest Api - Fatal编程技术网

Javascript 在angularJS中使用restangular承诺创建服务

Javascript 在angularJS中使用restangular承诺创建服务,javascript,angularjs,restangular,wordpress-rest-api,Javascript,Angularjs,Restangular,Wordpress Rest Api,好的,这让我发疯了,基本上我正在尝试创建一个服务来获取和评估用户能力,我正在使用WP-restapi。我使用restanglar获取JSON数据 在此阶段,我将在控制器本身中测试该函数,但无论我在何处测试它,无论是在使用this.method的自定义服务中还是在控制器内部,无论是否使用$scope,结果始终是未定义的。我知道我在函数中返回true或false的方式中遗漏了一些东西,或者在JS中的承诺中有一些根本不同的东西。代码如下: var current_user = parseInt

好的,这让我发疯了,基本上我正在尝试创建一个服务来获取和评估用户能力,我正在使用WP-restapi。我使用restanglar获取JSON数据

在此阶段,我将在控制器本身中测试该函数,但无论我在何处测试它,无论是在使用this.method的自定义服务中还是在控制器内部,无论是否使用$scope,结果始终是未定义的。我知道我在函数中返回true或false的方式中遗漏了一些东西,或者在JS中的承诺中有一些根本不同的东西。代码如下:

    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!');
    }
var current\u user=parseInt(o2\u i18n.user\u id),
当前用户能力,
能力;
$scope.currentUserCan=功能(能力){
如果(当前用户!==“0”){
wpAPIResource.one('users').get()
.然后(功能(诱惑者){
对于(变量i=0;i
如果
current\u user!='0'
。例如,您应该让它返回一个承诺(对于以下内容,您需要注入
$q
服务)



我也清理了你的回路。在OP中,如果在
allUsers
数组中找不到用户,则内部循环中没有任何点,也没有
返回值。

谢谢Phil,它的效果非常好。所以基本上我忽略了一个事实,如果我要返回wpAPIResource.one。。。(我确实尝试过)我的主作用域函数返回了一个承诺,我必须将其作为一个承诺来处理,相反,我希望返回一个true-false值。最后,我必须学习更多关于angular promises和$q服务的知识,也许我需要更新我在JS函数编程方面的知识。还有什么我要找的吗?与PHP等相比,作为一名JS开发人员考虑问题时,似乎有更多的不同之处。
$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!");
    }
});