Как использовать $ q.all (обещания) в angularjs - PullRequest
0 голосов
/ 03 октября 2019

Обычно я делаю

$http({
    method:'GET',
    url: 'exmapleURL',
    params: {someParams}
}).then(function(response) {
    console.log(response); // response contains data I need
});

Теперь мне нужно выполнить несколько таких вызовов, и я хотел бы дождаться завершения всех из них, прежде чем что-то делать со своими ответами, и $ q.all ()Кажется, это хорошее место для начала.

В справочнике по сервисному API AngularJS $ q - документ $ q.all ,

все (обещания)

Объединяет несколько обещаний в одно обещание, которое разрешается при разрешении всех входных обещаний.

Возвращает: Возвращает одно обещание, которое будет разрешено с помощью массива /хэш значений, каждое значение соответствует обещанию с тем же индексом / ключом в массиве / хеше обещаний. Если какое-либо из обещаний разрешается с отклонением, это получающееся обещание будет отклонено с тем же значением отклонения.

Означает ли это, что если я передам массив запросов (например, $ q.all(вызовы) .then (ответ)), возвращенные обещания находятся в массиве в том же порядке , в котором передаются вызовы? Могу ли я сделать что-то вроде response[0], чтобы получить данные ответа, возвращенные 0-м вызовом? Спасибо.

1 Ответ

0 голосов
/ 03 октября 2019

Означает ли это, что если я передам массив запросов (например, $ q.all (вызовы) .then (ответ)), возвращенные обещания будут в массиве в том же порядке, что и вызовыв? Могу ли я сделать что-то вроде response [0] для получения данных ответа, возвращенных 0-м вызовом?

Да, результаты в массиве возвращаются в том же порядке:

angular.module("app",[])
.run(function($q) {
     var promise99 = $q.when(99);
     var promise22 = $q.when(22);
     
     $q.all([promise22,promise99]).then(function([result22,result99]) {
         console.log(result22);
         console.log(result99);
     });
});
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app"></body>

$q.all Также принимает хэши

angular.module("app",[])
.run(function($q) {
     var promise99 = $q.when(99);
     var promise22 = $q.when(22);

     var promiseHash = {
         r99: promise99,
         r22: promise22
     };
     
     $q.all(promiseHash).then(function(resultHash) {
         console.log(resultHash.r22);
         console.log(resultHash.r99);
     });
});
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app"></body>

Для получения дополнительной информации см.

...