2013-08-22 156 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,那么一切都会好的,数据将绑定到模型中。