Выполнять преобразователи по одному? - PullRequest
0 голосов
/ 27 апреля 2019

В следующем коде у меня есть два резольвера: loggedin и owner.

   .when('/admin/deals/my-deals', {
        templateUrl: 'views/assessment/assessments_my_test.html',
        controller: 'DealTestController',
        resolve: {
            loggedin: checkAdminin,
            owner: getOwnerByEmail
        }
    })

Они работают параллельно, но мне нужно сначала подождать loggedin и только потом запустить owner.Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Для последовательного запуска двух асинхронных функций их необходимо объединить в цепочку:

.when('/admin/deals/my-deals', {
    templateUrl: 'views/assessment/assessments_my_test.html',
    controller: 'DealTestController',
    resolve: {
        both: function() {
            var result = {};
            var promise = checkAdmin();
            var p2 = promise.then(function(data) {
                result.loggedin = data;
                return getOwnerByEmail();
            });
            var p3 = p2.then(function(data) {
                result.owner = data;
                return result;
            });
            return p3;
         }
     }
})

Оба обещания должны быть вызваны и разрешены в одной составной функции распознавателя.Функция both разрешается с помощью объекта:

{ loggedin: <data from checkAdmin>,
  owner:    <data from getOwnerByEmail>
}
0 голосов
/ 27 апреля 2019

Вы можете связать обещания.Теперь это специальные обещания для маршрутизации, и у меня нет среды, настроенной для проверки этого в angularjs, но она работает в простом JavaScript.Стоит попробовать что-то вроде:

resolve: {
  loggedin: checkAdminin.then(getOwnerByEmail)
}

Вам придется каким-то образом связать два обещания, иначе они будут выполняться асинхронно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...