我想在一个链中进行多个Ajax调用。但我也想在每次通话后按摩数据,然后再进行下一次通话。最后,当 所有 调用成功时,我想运行其他代码。
我正在为我的Ajax调用使用Angular $ http服务,并坚持这一点。
可能吗?
是的,由于AngularJS的$http服务是围绕PromiseAPI构建的,因此可以非常优雅地对其进行处理。基本上,对$http方法的调用会返回一个Promise,您可以使用该then方法非常轻松地链接Promise 。这是一个例子:
$http
then
$http.get('http://host.com/first') .then(function(result){ //post-process results and return return myPostProcess1(result.data); }) .then(function(resultOfPostProcessing){ return $http.get('http://host.com/second'); }) .then(function(result){ //post-process results of the second call and return return myPostProcess2(result.data); }) .then(function(result){ //do something where the last call finished });
您也可以将后处理和下一个$http功能组合在一起,这完全取决于谁对结果感兴趣。
$http.get('http://host.com/first') .then(function(result){ //post-process results and return promise from the next call myPostProcess1(result.data); return $http.get('http://host.com/second'); }) .then(function(secondCallResult){ //do something where the second (and the last) call finished });