2015-04-04 47 views
2

我正在写一个角度的应用程序,Angular非常关心分离问题。任务后的回调函数

我有一个控制器和一个服务,我不希望我的代码打破关注的分离。

在我的控制器中,我试图从一个Web服务获取数据,然后从第一个接收的数据获取所有其他Web服务 - 由于JavaScript异步性质,我无法找到一个不需要的方法在关注点分离方面越过界限。

这里是一个的jsfiddle显示它:

http://jsfiddle.net/yak2m1ve/

现在记住我试图找到一个优雅的解决方案,不破的SoC - 不是一个肮脏的黑客攻击,使其工作。

//controller 
var x = fn1(); 
var y = fn2(x); 

alert(y); 

//service 
function fn1(){ 
    setTimeout(function(){ 
     return '123'; //web request example 
    }, 1000); 
} 

function fn2(code){ 
    return 'asdfb' + code; 
} 

回答

1

尽管plunker代表了简单函数调用的问题,但显然您会调用web服务调用。

在这种情况下,您需要使用Angular Promise API

例如,假设您应该执行以下操作顺序。

  1. 获取电影的详细信息。

  2. 检索它的明星演员。

  3. 将响应分配给Scope变量。

在你的服务,你必须

​​

而在你的控制器:

$scope.getMovie = function(movie) { 
     service.getMovie(movie) 
     .then(function(movieData) { 
      service.getStarCast(movieData).then(function(response) { 
       $scope.starCast = response; 
      }); 
     }); 
    }; 
+0

惊人的答案非常感谢你 – Jamesla 2015-04-05 20:57:16

+0

高兴,这有助于(Y)。 – 2015-04-06 03:09:29