使用AngularJS的嵌套异步调用

时间:2015-06-09 17:33:54

标签: javascript angularjs rest asynchronous callback

我正在使用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?!
    });
  });
});

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

3 个答案:

答案 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。它会返回多个承诺。