AngularJS:在单个函数中等待多个异步调用

AngularJS: Waiting for Multiple asynchronous calls in a single function

提问人:Student 提问时间:4/22/2020 更新时间:4/22/2020 访问量:333

问:

我有一个 AngularJS 函数,我在其中进行了 2 个异步调用。这 2 次调用不是依赖的,但该函数应仅在两次调用完成且结果存储在返回变量中时返回。

我尝试了不同的解决方案,最终使用了如下所示的解决方案。但它非常缓慢,因为它等待第一个完成

        function myAngularfunction(a, b) {
        var defer = $q.defer();
        var test= {
            a: "",
            b: ""
        };

        msGraph.getClient()
            .then((client) => {
                // First Async call
                client 
                .api("https://graph.microsoft.com/v1.0/")
                .get()
                 .then((groupResponse) => {
                        var result = groupResponse;
                        test.a= result.displayName;

                        msGraph.getClient()
                            .then((client) => {
                                // Second Async call
                                client
                                    .api("https://graph.microsoft.com/v1.0/teams/")
                                    .get()
                                    .then((groupResponse) => {
                                        var result = groupResponse;
                                        test.b= result.displayName;
                                        defer.resolve(test);
                                    });

                            });

                    });
            });


        return defer.promise;
    }

调用函数

myAngularfunction(a, b).then(function(obj)

我怎样才能在同一个函数中等待两个调用而不嵌套它们?或者调用下一个而不等待第一个完成。

javascript angularjs 异步 承诺 angular-promise

评论

1赞 ibrahim tanyalcin 4/22/2020
为什么不使用 Promise.all ?developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/......

答:

0赞 Jack Chen 4/22/2020 #1

也许你可以试试这样的$when:$.when(functiton1,function2).done(()=>{})。但是您需要在函数 1 和函数 2 中添加 deffered。

0赞 Praveen.R 4/22/2020 #2
  1. 我认为你的情况最适合使用语法。$q.all([promise1, promise2, promise3]).then()
  2. 你多次打电话,我认为这是可以避免的。msGraph.getClient()