$ resource promise解决后,从服务返回值

时间:2017-10-04 13:34:54

标签: angularjs angular-promise ngresource angularjs-ng-resource

我有这样的工作代码:

服务(工厂?):

myApp.factory('MyService', ['$q','$resource', 'MyResource',
    function ($q, $resource, MyResource) {

        return {
            getRoles: function () {
                return MyResource.getRoles(); //MyResource makes API calls using $resource 
            } } });

控制器:

$scope.Roles = MyService.getRoles();
$scope.Roles.$promise.then(function () { $scope.RolesCount = $scope.Roles.length; });

我想做的是在MyService中创建这样的函数,一旦getRoles被解析,它将返回角色数量,所以我可以在控制器中使用它,如下所示:

$scope.RolesCount = MyService.getRolesCount();

然后在html中

{{RolesCount}}

不幸的是,我不知道怎么做,因为我的getRolesCount()方法需要返回一些内容,所以我不能在MyService中使用$ promise.then()。一旦我提出更准确的内容,我就会尝试更新我的问题标题。

1 个答案:

答案 0 :(得分:0)

如果需要在服务中转换服务器响应,则应将let c1 = Contact(name:"Mike Smith",email:"mike@smith.com") let c2 = Contact(name:"John Doe",email:"john1@doe.com") let c3 = Contact(name:"John Doe",email:"john2@doe.com") let c4 = Contact(name:"Jane Doe",email:"jane2@doe.com") let c5 = Contact(name:"Jane Doe",email:"jane1@doe.com") let people = [c1, c2, c3, c4, c5] print(people) // "[Mike Smith - mike@smith.com, John Doe - john1@doe.com, John Doe - john2@doe.com, Jane Doe - jane2@doe.com, Jane Doe - jane1@doe.com]\n" print(people.sorted()) // "[Jane Doe - jane1@doe.com, Jane Doe - jane2@doe.com, John Doe - john1@doe.com, John Doe - john2@doe.com, Mike Smith - mike@smith.com]\n" 移到那里。但是,如果then应该解包一个promise并为一个值分配一个值,就像上面的代码一样,这是不实际或不可能的。

then返回一个在promise解析中填充的对象。资源应该在视图中使用的方式是:

$reaource

更新对象时,它也会在视图中更新。将值分配给另一个变量效率很低。

不可能做像

这样的事情
{{Roles.length}}

因为$scope.RolesCount = MyService.getRolesCount(); 是异步的,它解析的值是标量。可以使用`async..await,(TypeScript或ES2017)将其展平,但需要额外的措施来将控制流与AngularJS摘要同步,如this answer中所述。