Angular工厂:返回$ http承诺或数据?

时间:2015-05-06 20:48:32

标签: angularjs angularjs-factory angularjs-http

Angular相当新鲜,我想问的是哪个实践在

之间被认为更好

向控制器发送承诺

控制器

tween.to(ball.scale, 2, {x: 10});

服务

factory.method()
  .success(function (data) {
    // do stuff
  })
  .error(function (data) {
    // throw error
  });

将数据发送到控制器

控制器

return {
  method: function() {
    return $http.get(url);
  }
};

服务

myValue = factory.method();


请注意,我可能完全离开这里,第二种方法可能不起作用(还没有测试过),但只是想出于好奇而问。如果有更好或更有效的做法我会很高兴听到他们,非常感谢你们。

1 个答案:

答案 0 :(得分:1)

我通常使用第一种解决方案,我可以确认它的效果非常好。除此之外,例如它允许您:

    从控制器
  • 控制异步流
  • 因此服务, paralellize 加入他们,展示微调器和其他东西
  • 在其他异步上下文中重用相同的服务,例如路由解析
  • 处理承诺拒绝

编辑:

这就是说,此外,您可以两者,例如Restangular does与" 增强型承诺"。使用then$object或附加的任何内容返回$return能够使用的内容将允许您:

  • 使用承诺

    myService.myMethod.then(
      function(data) {//Success
        //Manipulate data
        $scope.whatever = data;
      },
      function(err) {
        //Handle error
      }
    );
    
  • 或只是$return,当承诺结算时>将会填充

    $scope.whatever = myService.myMethod().$return;
    //Notice that you just can't handle rejection
    

使用角度$q服务的服务示例:

  var deferred = $q.defer();

  //Create $return reference
  deferred.promise.$return = [];    

  deferred.promise.then(function(data) {
    //replace $return elements with data elements, keeping reference
    angular.copy(data, deferred.promise.$return);
  });

  setTimeout(function() {
    deferred.resolve([
      'White',
      'Pinkman'
    ]);
  }, 1000);

  return deferred.promise;

Haven未对此代码进行测试,但您明白了

相关问题