【问题标题】:Best aproach when dealing with mutliple promisses处理多个承诺时的最佳方法
【发布时间】:2018-02-27 10:59:21
【问题描述】:

我在互联网上查找,但没有看到明确的答案。所以这是我的情况:

代码是head写的,请原谅不完整 我有一个看起来像这样的页面:

<div ng-controller="myController">
    <my-customer my-callback="directiveCallback(item)" />
</div>

然后我有一个如下所示的脚本:

var app = angular.module('myApp', []);
app.controller('myController', ['$scope', 'apiService', function($scope, apiService) {

    apiResponse = apiService.getAll('myRepo');

    apiResponse.then(function(d){
     $scope.data = d;   
    })

    $scope.directiveCallback = function(item) {

        // do stuff with $scope.data
    }

  }])
  .directive('myCustomer', function() {
    return {
        scope: {
            myCallback:'&'
        },
      template: 'Name: {{customer.name}} Address: {{customer.address}}'
    };
  });

问题是服务承诺解析并返回一些数据。 指令控制器正在调用另一个服务,该服务返回一些数据并在处理完它接收的数据后触发回调。

当他到达回调函数时,项目将附加到 $scope.data。

问题是在填充 $scope.data 之前触发了回调。 我最近解决了这个问题,以便我将回调包装在 $timeout 中,并通过一个指令参数设置一个可设置的延迟。

这是正确的方法还是有更好的方法?

【问题讨论】:

  • 你已经有了一个承诺。您可以将其链接到directiveCallback 中,不是吗?
  • 你的意思是把它传递给 direcitveCallback?
  • 或者在指令回调中使用apiResponse?
  • 1.拥有服务缓存并返回相同的 promise。 2 将服务注入任何依赖项(如组件、控制器和指令)。 3. 每个依赖项都可以调用所需的方法和服务,并对产生的承诺做一些事情。
  • 不应该做的是传递回调,这是一个糟糕的设计,您将在其中创建紧密耦合的组件(通用术语,而不是 angularjs 组件,尽管它们也适用于该类别)。

标签: angularjs callback directive


【解决方案1】:

嗯,这不简单吗:

$scope.directiveCallback = function(item) {
  apiResponse.then(function() {
    console.log($scope.data); // always updated
    // do whatever
  })
}

【讨论】:

    猜你喜欢
    • 2018-11-18
    • 2017-12-26
    • 2014-12-05
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多