นอกจากนี้ยังมีความเป็นไปได้ที่มันจะไม่วนซ้ำไม่สิ้นสุดเลย การทำซ้ำ 10 ครั้งไม่ใช่จำนวนที่มากพอที่จะสรุปได้ว่าด้วยจำนวนที่แน่นอน ดังนั้นก่อนที่จะไล่ล่าห่านป่าขอแนะนำให้แยกแยะความเป็นไปได้นั้นก่อน
วิธีที่ง่ายที่สุดคือการเพิ่มจำนวนลูปการย่อยสูงสุดให้เป็นจำนวนที่มากขึ้นซึ่งสามารถทำได้ในmodule.config
วิธีนี้โดยใช้$rootScopeProvider.digestTtl(limit)
วิธีการ หากinfdig
ข้อผิดพลาดไม่ปรากฏขึ้นอีกต่อไปคุณก็มีตรรกะการอัพเดตที่ซับซ้อนเพียงพอ
ถ้าคุณสร้างข้อมูลหรือวิวอาศัยนาฬิกา recursive คุณอาจต้องการที่จะค้นหาสำหรับการแก้ปัญหาซ้ำ (เช่นไม่อาศัยใหม่แยกแยะลูปที่จะเริ่มต้น) โดยใช้while
, หรือfor
Array.forEach
บางครั้งโครงสร้างจะซ้อนกันสูงและไม่ได้วนซ้ำอีกด้วยอาจจะไม่มีอะไรให้ทำมากนักในกรณีเหล่านั้นยกเว้นการเพิ่มขีด จำกัด
อีกวิธีหนึ่งในการแก้ไขข้อผิดพลาดคือการดูข้อมูลสรุป ถ้าคุณพิมพ์ JSON สวย ๆ คุณจะได้อาร์เรย์อาร์เรย์ รายการระดับบนสุดแต่ละรายการแสดงถึงการวนซ้ำการทำซ้ำแต่ละรายการประกอบด้วยรายการเฝ้าดู
ตัวอย่างเช่นหากคุณมีคุณสมบัติที่แก้ไขใน$watch
ตัวมันเองจะเห็นได้ง่ายว่าค่านั้นเปลี่ยนแปลงไปเรื่อย ๆ :
$scope.vm.value1 = true;
$scope.$watch("vm.value1", function(newValue)
{
$scope.vm.value1 = !newValue;
});
[
[
{
"msg":"vm.value1",
"newVal":true,
"oldVal":false
}
],
[
{
"msg":"vm.value1",
"newVal":false,
"oldVal":true
}
],
[
{
"msg":"vm.value1",
"newVal":true,
"oldVal":false
}
],
[
{
"msg":"vm.value1",
"newVal":false,
"oldVal":true
}
],
[
{
"msg":"vm.value1",
"newVal":true,
"oldVal":false
}
]
]
แน่นอนว่าในโปรเจ็กต์ขนาดใหญ่สิ่งนี้อาจไม่ง่ายอย่างที่คิดโดยเฉพาะอย่างยิ่งเนื่องจากmsg
ฟิลด์มักมีค่า"fn: regularInterceptedExpression"
หากนาฬิกาเป็นแบบ{{ }}
สอดแทรก
นอกเหนือจากนั้นวิธีการที่กล่าวไปแล้วเช่นการตัด HTML เพื่อค้นหาต้นตอของปัญหาก็มีประโยชน์แน่นอน