保持服务的初始化,直到所有承诺都得到解决

时间:2012-12-31 07:35:17

标签: javascript angularjs

routeProvider中,如果我们提供包含承诺的解析对象,我们可以保留routing;它会等到所有的承诺都解决了。但是,我无法在应用程序的初始化中找到方法。

angular.module("app", []).run(function (){ //init app })但是对于$resource$http是异步的,应用可以在解析依赖关系(promises)之前完成初始化,从而创建race condition 。我们不希望这样。

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

2 个答案:

答案 0 :(得分: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方法中,您可以执行所有预加载(并等待所需的promise)。我当然有兴趣听其他解决方案。

答案 1 :(得分:1)

只是在这里考虑一下,但是只宣告1'赶上所有'要开始的路线,并在该路线提供者中,保持路线的加载,直到您完成所需的一切。 (使用决心和承诺)。

然后,当您完成后,注册其余路线,然后重新加载原始路线。这一次,应该注册一个更具体的处理程序,它将绕过你的所有'初始化。

您如何看待,有什么问题吗?