angularjs - Angular.JS 触发两个异步服务调用,然后在两者都完成后执行操作

标签 angularjs

我仍然把我的大脑围绕在 Angular.JS 上。

我有两个独立的 $http 调用,它们从远程 Web 服务中检索数据。我有一个要在两个服务调用完成后触发的操作。

  • 第一个服务调用将填充 $scope.model
  • 第二个服务调用,修改 $scope.model 中的数据(它添加了一些在 View 中呈现的计数器属性)

  • 另一个独特的要求是最终将在 Controller 外部使用 $scope.model 调用和更新第二个服务调用。这是一个通知消息泵。

    我猜我将使用 promises $q 和可能的 $service,但我不确定从哪里开始遵循一些最佳实践。

    我知道在这里异步调用听起来不合适,因为我的示例可以通过同步执行来简化它。但是,第二个服务调用是通知更新程序,因此它会不断轮询服务器(最终将使用 websocket)。

    这是我将在此应用程序中看到的常见模式。

    最佳答案

    你会想要使用 $q promise 。特别是 $q.all()。所有 $http 方法都将返回 promise 。 $q.all([promise, promise, promise]).then(doSomething)将等待所有 promise 解决然后调用 doSomething将一系列 promise 结果传递给它。

    app.service('myService', ['$http', '$q', function($http, $q) {
       return {
          waitForBoth: function() { 
              return $q.all([
                 $http.get('/One/Thing'),
                 $http.get('/Other/Thing')
              ]);
          };
       }
    }]);
    

    然后调用它:
    app.controller('MyCtrl', ['$scope', 'myService', function($scope, myService) {
       myService.waitForBoth().then(function (returnValues){
           var from1 = returnValues[0].data;
           var from2 = returnValues[1].data;
           //do something here.
       });
    }]);
    

    这是一个演示 Plunker为你。

    关于angularjs - Angular.JS 触发两个异步服务调用,然后在两者都完成后执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15114942/

    相关文章:

    angularjs - 如何使用 bower/grunt 正确管理字体

    angularjs - 使用等待时 Node 响应中的复制问题

    angularjs - 使 md-tooltip 始终处于事件状态?

    javascript - 在 AngularJS 中读取 URL 参数 - 一种简单的方法?

    javascript - 将 Highcharts 集成到 Angular-gridster

    jquery - 将 csrf token 传递给 blueimp fileupload

    javascript - AngularJS 和 Bootstrap 选项卡行为不起作用

    javascript - 如何为导致更改的点击事件相关的 ng-repeat 元素设置动画

    javascript - angularjs 脚本不工作

    javascript - 如何在 angularjs 中一起使用 angular-gridster 和 highcharts-ng 指令