DarthJS
@DarthJS

Как дождаться завершения run блока при асинхронном вызове?

Суть такая:
Есть Сервис, который делает Get data запрос и сохраняю его в этом же сервисе, типа повторном запросе я проверяю наличие данные и если они есть, я их подставляю вместо повторного запроса, пример:
function getData() {
            if (data) {
                var defer = $q.defer();
                defer.resolve({data: data});
                return defer.promise;
            }
            return ApiWrapper.resolve('get', 'api/data');  // просто врапер который делает запрос
        }

Есть модули, в ui-router которых использую resolve:
resolve: {
 data: function (MyService) {
return MyService.getData().then(function(response){
    if(response && response.data) {
       return response.data;
      }
}
}

В run блоке происходит Get запрос, использую ui-router resolve, но один из модулей не дожидается присвоенных данных и делает повторный запрос. Как это избежать? И дождатся присвоенных данных
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
Вы проверяете есть ли данные. Данных ещё нет - значит отправляем запрос.
Чтобы сделать как вы хотите - нужно сохранить promise, и проверять, а есть ли promise, и если есть - возвращать его.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час