2015-04-04 53 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