AngularJS: ожидание нескольких асинхронных вызовов в одной функции - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть функция AngularJS, в которой я делаю 2 асинхронных c вызова. Эти 2 вызова не являются зависимыми, но функция должна возвращаться только тогда, когда оба вызова завершены и результат сохранен в возвращаемом var.

Я пробовал разные решения и в итоге использовал тот, который показан ниже. Но он очень медленный, так как его ожидание первого завершается sh

        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)

Как я могу ждать обоих вызовов в одной и той же функции с вложив их? Или позвонив следующему, не дожидаясь, пока первый завершится sh.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020
  1. Я думаю, что ваша ситуация лучше всего подходит для использования $q.all([promise1, promise2, promise3]).then() синтаксиса.
  2. Вы звоните msGraph.getClient() несколько раз, я думаю, этого можно избежать.
0 голосов
/ 22 апреля 2020

может быть, вы можете попробовать $, когда это так: $ .when (functiton1, function2) .done (() => {}). но вам нужно добавить deffered в function1 и function 2.

...