18

如果我们给出一个包含 Promise 的 resolve 对象,routeProvider我们可以持有 routing它会等到所有的承诺都得到解决。但是,我在应用程序的初始化中找不到方法。

除了angular.module("app", []).run(function (){ //init app })a $resourceor $httpwhich 是异步的,应用程序可以在解决依赖项(承诺)之前完成初始化,这将创建一个race condition. 我们不希望那样。

所以问题是,有没有一种方法可以保持 a 的初始化,service直到所有给定的承诺都得到解决?

4

2 回答 2

5

我见过类似的问题。一个队友采用的一个有点优雅的解决方案是结合 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 方法中,您可以执行所有预加载(并等待所需的承诺)。我当然有兴趣听到其他解决方案。

于 2012-12-31T11:06:45.950 回答
1

只是在此处考虑负载,但是如何仅声明 1 条“捕获所有”路线开始,并在该路线提供者中,保持路线的加载,直到您完成所需的一切。(使用解决和承诺)。

然后,完成后,注册剩余的路线,并重新加载原始路线。这一次,应该注册一个更具体的处理程序,它会绕过你的“catch all”初始化程序。

你怎么看,有什么问题吗?

于 2013-07-05T08:50:44.723 回答