AngularJS promise in app.run() [duplicate]

2019-02-13 12:42发布

问题:

This question already has an answer here:

  • AngularJS : Initialize service with asynchronous data 10 answers

I'm working on angularJs and typescript project. I have to make synchronous http call and get some data from server before I launch my client app and load UI. I search on internet and see everybody speak about promise, huumm okay why not. So I use promise (make $http call and use $q to return promise) in my app.run(). Maybe I'm missing nothing because this is not working at all. Angular launch app.config(), then app.run(), ... But Angular does not wait app.config() finish before launch app.run(). So my first promise is launch in app.run() and before it resolve Angular try to instantiate controller... I don't want to create new service call httpSynchronous but I haven't any other ideas.

回答1:

Angular does not support asynchronous actions in .config and .run functions. If you want to delay your application, there are 2 ways:

  • The first one is to delay your whole application by using angular.bootstrap() to manually start it. But anything you do is outside angular, so you don't have access to anything but vanilla JavaScript.
  • The second one is to use the resolve property of your routes. If you use a router like angular route segment or ui router, you can define a top route / state with a resolve which would be resolved when your application loads (and if you force a full reload of your route).