Удерживайте инициализацию службы до тех пор, пока не будут разрешены все promises
В routeProvider
мы можем удерживать routing
, если мы дадим объект разрешения, содержащий promises; он будет ждать, пока все promises не будут разрешены. Однако я не смог найти способ сделать это при инициализации приложения.
Существует angular.module("app", []).run(function (){ //init app })
, но для a $resource
или $http
, который является асинхронным, приложение может завершить инициализацию до того, как будут решены зависимости (promises), которые создавали бы race condition
. Мы не хотим этого.
Итак, вопрос в том, есть ли способ, который будет содержать инициализацию a service
, пока не будут разрешены все заданные promises?
Ответы
Ответ 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".
Как вы думаете, какие-либо проблемы?