我如何阅读消息:[$ rootScope:infdig] 10 $ digest()迭代达成。中止!观察者在最近5次迭代中被解雇

时间:2014-11-20 16:12:50

标签: angularjs

这里有很多帖子谈论你如何解决这个问题,但我真的只是想知道我是如何阅读信息附带的那些疯狂的信息列表。我一直在使用角度超过一年,但总是被这个错误信息吓倒,以真正深入挖掘它并找出如何使用它对我有利。

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

1 个答案:

答案 0 :(得分:3)

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

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