【问题标题】:How do I read the message: [$rootScope:infdig] 10 $digest() iterations reached. Aborting! Watchers fired in the last 5 iterations我如何阅读消息:[$rootScope:infdig] 10 $digest() 达到了迭代。中止!在最后 5 次迭代中触发的观察者
【发布时间】:2014-11-20 16:12:49
【问题描述】:

这里有很多帖子在讨论您如何解决此问题,但我真的只想知道我是如何阅读消息随附的大量疯狂信息列表的。一年多来,我每天都在使用 Angular,但总是被那个错误消息吓到,无法真正深入研究它并找出如何利用它来发挥我的优势。

不过,现在我真的需要阅读错误消息,因为我们没有在本地收到错误消息。它只是在生产中不时发生(可能与使用旧浏览器的用户有关)。所以我从我们的错误日志中得到了错误消息,但我无法通过更改代码来重现或调试它。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    我不确定我是否完全理解这一点,但这是我自己发现的。

    1. 冒号后面有两个括号。 (...'atchers 在最后 5 次迭代中触发:[[{"msg') 第一个括号是 json 块的开头。从第一个括号复制到错误的末尾并找到一种方法来漂亮打印那个 json。(使用你最喜欢的代码编辑器或在线 json 格式化程序)
    2. 现在您有了一个打印精美的数组,其中包含 5 个条目。每个条目代表摘要循环中的一次迭代,即遍历应用程序中所有活动的观察者,寻找变化。 Angular 将重复迭代,直到它执行一个没有观察者更改值的迭代,或者直到它达到 10 次迭代,此时它会出错。这就是本案所发生的情况。
    3. 错误前有 10 次迭代,错误消息中包含 5 次。大概这意味着比错误消息中包含的更早发生了五次迭代。错误消息中的第一个条目是第 6 次迭代,消息中的最后一个条目是第 10 次迭代。
    4. 每次迭代的条目也是一个数组。在这种情况下,它是一个对象数组,每个对象代表一个观察者,其值在此迭代期间发生了变化。每个对象都会为您提供定义观察者的文本或函数、此迭代之前观察者的旧值以及此迭代之后的新值。
    5. 像故事一样从上到下阅读它,根据您对应用程序的了解添加评论。在我的例子中,我能够看到每次迭代中的变化如何导致创建新的观察者,需要另一个迭代。 “在第 6 次迭代中,这个观察者发生了变化,导致这些新东西在页面上呈现,创建了在第 7 次迭代中分配值的新观察者,然后......”没有无限循环或任何东西。事实上,如果 Angular 只愿意再进行 1 或 2 次迭代,它就会完成。

    希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 2016-07-21
      • 2016-05-25
      • 2014-10-24
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      相关资源
      最近更新 更多