2011-10-04 11 views
15

में 0 मिलीसेकंड अपने आवेदन में मैं कुछ जावास्क्रिप्ट कोड है कि setInterval 0 से मिलीसेकेंड उपयोग कर रहा है पाया तो तरह से व्यवहार:setInterval() जावास्क्रिप्ट

self.setInterval("myFunction()",0); 

जाहिर है, यह मेरे लिए एक अच्छा विचार की तरह प्रतीत नहीं होता । क्या कोई मुझे बता सकता है कि setInterval का व्यवहार क्या होगा? ("myFunction" सर्वर पर AJAX कॉल करता है)

मैं यह पूछ रहा हूं क्योंकि मेरे आवेदन में मुझे अनियमित व्यवहार है। 90% बार, एप्लिकेशन सही तरीके से व्यवहार करता है और सर्वर पर बिल्कुल एक कॉल किया जाता है। हालांकि कभी-कभी, सर्वर पर कई कॉल किए जाते हैं (अब तक, अधिकतम 48 कॉल हैं) और मुझे लगभग निश्चित है कि यह कोड की इस पंक्ति की गलती है।

उत्तर

17

ब्राउज़र अंतराल के लिए न्यूनतम मूल्य निर्धारित करता है। सामान्य 10ms, लेकिन यह ब्राउज़र पर निर्भर कर सकते हैं। इसका अर्थ यह है कि जितना तेज़ हो सके उतना तेज़ दोहराएं। डब्ल्यू 3 सी स्पेक 4 एमएमएस: http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers

यह सही है लेकिन शायद एक डिज़ाइन त्रुटि प्रकट करता है।

संपादित करें: वैसे, सेटटाइम/सेट इंटरवल में स्ट्रिंग को पास करने के लिए यह खराब प्रथा है, इसके बजाए एक फ़ंक्शन पास करें क्योंकि जावास्क्रिप्ट में प्रथम श्रेणी के फ़ंक्शन हैं।

+0

हां, मुझे लगता है कि जो भी इसे सेटटाइमआउट() को कॉल करने के लिए किया गया था। मै इसे बदलूंगा। –

0

, यह मामूली देरी के साथ केवल एक बार मार डाला बजाय setTimeOut का उपयोग करें:

window.setTimeout(myFunction, 10); 

आप AJAX का उपयोग कर रहे हैं, तुम किसी भी टाइमर का उपयोग करने की जरूरत नहीं है - बस अगले AJAX अनुरोध फोन वर्तमान AJAX अनुरोध के कॉलबैक (पूर्ण/सफलता घटना) में।

अपना वर्तमान कोड पोस्ट करें और हम आपको आगे मार्गदर्शन करने में सक्षम हो सकते हैं।

+0

मेरा मानना ​​है कि सेटटाइमआउट() कोडर का क्या मतलब है, क्योंकि सर्वर को कई बार कॉल करने के लिए यह समझ में नहीं आता है। –

0

मुझे लगता है कि myFunction() में clearInterval है।

असल में, आपने एक अंतराल सेट किया है जो जितनी बार हो सके हो सकता है। यदि जावास्क्रिप्ट को सक्रिय करने वाला ब्राउज़र वास्तव में अंतराल के अगले पुनरावृत्ति से पहले clearInterval भाग में आता है, तो यह ठीक होगा। अन्यथा, यह बार-बार होगा।

इसके बजाय setTimeout का उपयोग करें।

+0

कोई स्पष्ट अंतराल नहीं है :(मुझे विश्वास है कि यह एक कोडिंग गलती थी। मैं सेटटाइमआउट पर स्विच करूंगा। धन्यवाद –

1

setInterval(myFunction, 0) कॉल myFunction लगातार न्यूनतम देरी के साथ कॉल करता है। यह लगभग अनंत लूप में myFunction पर कॉल करने जैसा है। सिवाय इसके कि आप clearInterval विधि का उपयोग कर लूप को रोक सकते हैं।

+0

@ ब्रैड मैंने सोचा था कि "इसे छोड़कर इसे 'स्पष्ट अंतराल' से साफ़ किया जा सकता है: पी –

+0

मैं सोच रहा था कि यह एसओ के साथ एक बग था जब कई संपादन करते हैं तो यह एक या कुछ वापस रोल करता है: पी –

+0

@ जोसेफ, तुम्हारा क्या मतलब है? मैंने अपने जवाब से कुछ भी संपादित नहीं किया है, मैंने अभी प्रासंगिक भागों के आसपास कोड टैग जोड़े हैं। – Brad

संबंधित मुद्दे