2015-06-09 69 views
0

我正在使用AngularJS的一个小项目,我正在开始各种异步调用,开始到 变得杂乱。我知道有一个更好的方式来打这些电话,但我不知道如何。这是我有:使用AngularJS的嵌套异步调用

asyncCall1(someArgument,function(asyncCall1Response) { 
    // do some stuff 
    asyncCall2(asyncCall1Response.someAttribute,function(asyncCall2Response) { 
    // do some more stuff 
    asyncCall3(asyncCall2Response.someAttribute,function(asyncCall3Response) { 
     // finish doing stuff...or maybe call asyncCall4?! 
    }); 
    }); 
}); 

什么是使用作为参数的异步调用的响应被传递到另一个异步调用正确的方法是什么?

回答

-1

处理异步调用的一种方法是使用$ q。它返回多个承诺。

0

你可以用链的诺言,你可以读到这里:AngularPromises

考虑asyncCall1回报promise所以我们可以这样写:

 asyncCall1.then(function(response1){ 

      // ... 
      // pass data from response to other async call 
      return asyncCall2(response1); 
      }).then(function(response2){ 

      // ... 

      return asyncCall3(response2); 
     }).then(function(resonse3){ 
      // ..... 

     }, 
     function(error) { 

     }); 

的 '链用' 的优点是:

  • 您对所有异步任务只使用一个错误回调
  • 代码s EEMS更清晰(无异步金字塔)
0

我喜欢这样:

asyncCall1(arguments1) 
.then(asyncCall2) 
.then(asyncCall3) 
.then(doneFn); 

什么被从asyncCall1返回:■successHandler作为参数来传递asyncCall2。

样品:jsfiddle