AngularJS:缓存路由解析承诺

时间:2013-05-21 18:32:59

标签: caching angularjs routing promise resolve

在第一个示例代码中,所有代码都正常工作 - 在每个页面路由更改时,我们检查一些条件($timeout)并解决一个承诺:

JSFiddle Var sample code

在第二个示例中,我们将var rulesFactory移至app.factory('rulesFactory'),现在它可以运行一次:

JSFiddle App Factory sample code

是缓存吗?如何解决这个问题以提高代码的可重用性?

1 个答案:

答案 0 :(得分:7)

rulesFactory中的代码只运行过一次 - 第一次实例化服务本身。

第一次解决时会这样做:

  1. Angular认为它正在寻找一些名为'rulesFactory'的注入内容
  2. Angular找到一个名为rulesFactory的服务。它看到没有人使用过rulesFactory,并实例化了服务。
  3. 实例化服务rulesFactory,并在返回承诺
  4. 的情况下运行$ timeout

    第二次解决这个问题:

    1. Angular认为它正在寻找'rulesFactory'。 rulesFactory已经存在!
    2. Angular只获取rulesFactory的现有对象。
    3. 超时已经从之前用完,并且将使用相同的已解决的承诺。
    4. 对此的修复是让rulesFactory返回一个函数,该函数将再次运行超时 - 每次都需要它。

      另外,$ timeout本身会返回一个promise,所以你只需返回$ timeout: - )

      http://jsfiddle.net/JbTkp/4/