Return 一旦 $resource 承诺得到解决,服务的价值

Return value from service once $resource promise is resolved

我有这样的工作代码:

服务(工厂?):

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 被解析,就会有 return 个角色,这样我就可以像这样在控制器中使用它:

$scope.RolesCount = MyService.getRolesCount();

然后在 html

{{RolesCount}}

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

如果需要在服务中转换服务器响应,则应将 then 移到那里。但是,如果 then 应该像上面的代码一样打开承诺并为范围分配一个值,那是不切实际或不可能的。

$resource returns 在 promise 解析时填充的对象。在视图中应该使用资源的方式是:

{{Roles.length}}

更新对象时,视图中的对象也会更新。将值赋给另一个变量是低效的。

不可能做到

$scope.RolesCount = MyService.getRolesCount();

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

中所述