Подтвердить что ты не робот

Удерживайте инициализацию службы до тех пор, пока не будут разрешены все promises

В routeProvider мы можем удерживать routing, если мы дадим объект разрешения, содержащий promises; он будет ждать, пока все promises не будут разрешены. Однако я не смог найти способ сделать это при инициализации приложения.

Существует angular.module("app", []).run(function (){ //init app }), но для a $resource или $http, который является асинхронным, приложение может завершить инициализацию до того, как будут решены зависимости (promises), которые создавали бы race condition. Мы не хотим этого.

Итак, вопрос в том, есть ли способ, который будет содержать инициализацию a service, пока не будут разрешены все заданные promises?

4b9b3361

Ответ 1

Я видел подобную проблему. Несколько элегантное решение, с которым работал помощник команды, было комбинацией с RequireJS и модулем domReady:

define(['require', 'angular', 'app','routes', 'pendingServices'], 
      function (require, ng, app, pendingServices) {


  /* place operations that need to initialize prior to app start here
   * using the `run` function on the top-level  module
   */
  app.run(pendingServices.init)

  require(['domReady!'], function (document) {
      /* everything is loaded...go! */
      ng.bootstrap(document, ['mainModule']);
  });

});

В методе init вы можете выполнить все предварительные загрузки (и дождаться желаемого promises). Мне интересно услышать другие решения, конечно.

Ответ 2

Просто подумайте о загрузке здесь, но как только объявить маршрут "поймать все", чтобы начать, и в этом провайдере маршрутов держите загрузку маршрута, пока не сделаете все, что вам нужно. (с помощью разрешения и promises).

Затем, когда вы закончите, зарегистрируйте оставшиеся маршруты и перезагрузите исходный маршрут. На этот раз необходимо зарегистрировать более специфичный обработчик, который будет обходить ваш инициализатор "catch all".

Как вы думаете, какие-либо проблемы?