ArturAralin
@ArturAralin
Программист, Музыкант

AngularJS. Как реализовать ожидание завершения promis-ов?

Всем привет! В чем собственно проблема: У меня есть метод User.hasRole(string), есть запрос к серверу на получение данных о юзере

var self = this;
this.userData = null;
$q.all(Auth.currentUser()) /* Внутри происходит запрос */
    .then(function(currentUser) {
      self.userData = currentUser;
      self.isAuth = true;
    },function(error) {
      self.userData = null;
      self.isAuth = false;
    });


В одном из контроллеров я в $scope передаю метод hasRole() и использую его так

<li ng-if="hasRole('user')">
...
</li>


и все бы хорошо, но angular ругается на то, что свойство User.userData == null.

Вопрос: как сделать чтобы метод hasRole ожидал завершения промисов?
  • Вопрос задан
  • 2955 просмотров
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Выложите полностью код сервиса и пример использования hasRole.
Для app-wide данных, которые по-идее должны быть предзагружены при старте приложения я бы использовал angular deferred bootstrap модуль.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Я может не правильно понимаю суть проблемы, но мне кажется что вы хотите что бы вьюшка отображалась только после подгрузки данных. В этом случае можно применить ресолвы контроллера (если у вас используется ngRoute/uiRouter).

Так же не понятно почему используете $q.all когда там один промис всего. Ну мол $q.all ожидает массив и в аргументы будет передавать массив

Auth.currentUser().then(function(currentUser) {
    self.currentUser = currentUser;
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы