2013-08-22 252 views
0

我呼叫一個http服務,循環播放結果,並且每個項目都充當另一個http呼叫的密鑰。以角度呼叫另一個http呼叫中的http呼叫

這樣做的最佳方法是什麼?

我猜在另一個$ http調用中調用$ http不起作用,因爲外部$ http-loop可能會在內部$ http調用 完成之前退出?

//僞代碼:

$http.get(url).then((response) -> 
    foreach response.data as item 
     $http.get(item.url).then((response) -> 
      foreach response.data as item 
     ) 
    return result 
) 

並未真正發揮作用,對不對?

+1

我不知道,但什麼是你的關心,但是所有的HTTP調用將作出不論循環或功能退出的。如果你想要一些類型的協調,那麼你需要提供更多的細節。 – Chandermani

+0

如果綁定到'then'內的'$ scope',則響應返回時應該沒有關係。 –

回答

1

這工作正常,但您需要收集數組或對象中的子響應並返回$ q.all(子響應)以確保調用方等待它們解析。

堅持你的僞代碼,我認爲它看起來像:

$http.get(url).then((response) -> 
var r = []; 
foreach response.data as item 
    r.push($http.get(item.url)) 
return $q.all(r).then((subs) -> foreach ...) 
) 
2

這個僞代碼可以正常工作。 then是異步操作的回調。有關詳細信息,請參閱promises的角度。

您是正確的代碼執行流程將繼續,但回調(then)仍然會在響應返回時觸發。

所以,這意味着如果你在then裏綁定$scope,那麼一切都會好的,數據將綁定到模型中。