वहाँ भी यह एक अनंत लूप नहीं होने की संभावना है। 10 पुनरावृत्तियों को निष्कर्ष निकालने के लिए एक पर्याप्त बड़ी संख्या नहीं है कि किसी भी राशि की निश्चितता के साथ। तो एक जंगली-हंस पीछा करने से पहले उस संभावना को पहले खारिज करना उचित हो सकता है।
ऐसा करने का सबसे आसान तरीका अधिकतम पाचन लूप काउंट को बहुत बड़ी संख्या में बढ़ा रहा है, जो module.configविधि का उपयोग करके विधि में किया जा सकता है $rootScopeProvider.digestTtl(limit)। यदि infdigत्रुटि दिखाई नहीं देती है तो आपके पास बस कुछ पर्याप्त जटिल अपडेट लॉजिक है।
यदि आप पुनरावर्ती घड़ियों पर निर्भर होने वाले डेटा या विचारों का निर्माण करते हैं, तो आप पुनरावृत्त समाधानों की खोज करना चाहते हैं (अर्थात नए डाइजेस्ट लूप्स पर निर्भर न हो) का उपयोग करना 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 को काटने जैसे अन्य पहले से बताए गए तरीके निश्चित रूप से सहायक हैं।