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