我正在使用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?!
});
});
});
使用异步调用的响应作为参数传递给另一个异步调用的正确方法是什么?
答案 0 :(得分: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) {
});
连锁承诺的优势'是:
答案 1 :(得分:0)
我喜欢这样:
asyncCall1(arguments1)
.then(asyncCall2)
.then(asyncCall3)
.then(doneFn);
从asyncCall1返回的内容:s successHandler作为参数传递给asyncCall2。
示例:jsfiddle
答案 2 :(得分:-1)
处理异步调用的一种方法是使用$ q。它会返回多个承诺。