2015-06-09 67 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