使用restangularpromise在angularJS中创建一个服务
creating a service in angularJS, using restangular promises
好吧,这让我很生气,基本上我要做的是创建一个服务来获取和评估用户功能,我使用的是WPRESTneneneba 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
函数不会返回任何内容。例如,您应该让它返回一个promise(对于以下内容,您需要注入$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
值。
相关文章:
- 在一个服务中引用多个API调用(Angular)
- 在angularJS中合并来自一个服务的两个数组
- 如何在使用typescript的另一个服务中的一个角度服务中使用$rootScope define
- 在Angular 2中的另一个服务中注入自定义服务
- 使用在另一个服务方法中声明为模块模式的服务方法之一
- 如何在使用sails JS执行res.view()函数调用之前调用另一个服务(函数)
- 当添加一个服务和一个过滤器或多个服务时,我在做什么导致未知提供者
- AngularJS:试图使用一个服务,得到错误"无法读取属性'那么'“未定义”;
- 将一个服务(工厂)注入到另一个服务中,这两个服务都是异步的
- 使用restangularpromise在angularJS中创建一个服务
- 在angular.js中重用一个服务中的方法
- 配置依赖于另一个服务angularjs的服务
- 常量在一个服务中未定义,但在另一个服务中有效
- 我需要使用一个服务来跨多个视图存储、保存和提供可用的数据
- 如何在另一个服务中使用一个服务
- 为另一个服务注入服务
- AngularStrap——从一个服务中调用一个模态
- 如何从一个控制器设置一个服务的值,并使用该服务更新另一个控制器的值
- 用AngularJS传递一个变量给一个服务
- AngularJS - routeProvider解析调用一个服务方法