2009-06-24 13 views
5

क्या किसी को पता है कि सिस्टम द्वारा अगली पंक्ति को पढ़ने से पहले मैं जावास्क्रिप्ट में नींद कैसे बना सकता हूं?जावास्क्रिप्ट में नींद कैसे करें?

उदाहरण:

1 var chkResult = Validation(); 
    2 //sleep here for for 10 sec before the next line been read  
    3 
    4 document.getElementById('abc').innerHTML = chkResult; 

इस उदाहरण के लिए, मैं कैसे जावास्क्रिप्ट नींद/इससे पहले कि यह लाइन 4 पढ़ने के लिए जारी है 10 सेकंड के लिए लाइन 2 में इंतजार कर सकते हैं? मैंने सेटटाइमआउट ('', 10000) की कोशिश की थी; लेकिन यह मुझे अभी भी लगता है के लिए काम नहीं है ...

+0

जावास्क्रिप्ट में नींद एक बुरा विचार यह कारण होगा के रूप में है ब्राउज़र का UI उत्तरदायी बनने के लिए – cobbal

+0

मुझे दस सेकंड सत्यापन करने की चिंता है। क्या सर्वर के जवाब देने का वह समय है? यदि आप AJAX कॉल के साथ सत्यापन कर रहे हैं, तो क्या आपको कॉलबैक नहीं मिलना चाहिए? – Nosredna

उत्तर

16

I Have the Hat सही संकेत दिया है। 10 सेकंड के बाद अपने आगे लाइन कोड को निष्पादित करने के setTimeout method का उपयोग करें:

var chkResult = Validation(); 
var timeout = window.setTimeout(function() { 
    document.getElementById('abc').innerHTML = chkResult; 
}, 10000); 

एक चर में टाइमआउट आईडी भंडारण यदि आप clear a timeout करना चाहते हैं काम हो सकता है।

5

setTimeout(function() { return true; }, 10000); 

पहला तर्क एक समारोह को उम्मीद है की कोशिश करो। यह स्मृति से है; मैंने इसका परीक्षण नहीं किया है।

संपादित करें: क्या गम्बो ने कहा ... देर से ... सुनिश्चित नहीं है कि मैं क्या सोच रहा था।

+0

आप या तो निष्पादित करने के लिए कोई फ़ंक्शन या कोड की स्ट्रिंग दे सकते हैं। Https://developer.mozilla.org/en/DOM/window.setTimeout – Gumbo

+0

देखें जानना अच्छा है। धन्यवाद। –

+0

स्ट्रिंग्स आम तौर पर फंसे हुए हैं क्योंकि वे एक eval करने के बराबर हैं, लेकिन दोनों विधियों काम करते हैं। Lulz के लिए – Nosredna

2

सेटटाइमआउट जावास्क्रिप्ट दुभाषिया के भीतर एक अलग निष्पादन "धागा" शुरू करता है। आपको इसे एक फ़ंक्शन पास करने और अपनी स्क्रिप्ट को इस तरह से डिज़ाइन करने की आवश्यकता है कि सेटटाइमआउट रन का कार्य जारी रहेगा जहां कॉलिंग फ़ंक्शन छोड़ा गया था - जिससे नींद आती है।

1

देरी तब तक नहीं होगी जब तक कि जावास्क्रिप्ट ब्राउज़र पर वापस नियंत्रण छोड़ देता है, इसलिए आपकी लाइन 4 सेटटाइमआउट शुरू होने से पहले निष्पादित हो जाएगी।

आपको घटनाओं के आधार पर सबकुछ घटाना चाहिए।

0

मैं इस एक सामान्य समाधान के रूप में सुझाव है कि मई:

function sleep (ms, args, obj) { 
    /* Called at the top of a function to invoke a delay in processing that 
     function 

     Returns true if the function should be executed, and false if the sleep 
     timer is activated. 

     At the end of the sleep tiemout, the calling function is re-called by 
     calling it with "apply (obj, args || [])". 
    */ 

    var caller = sleep.caller; 
    if (caller.sleepTimer) { 
     /* if invoked from timeout function, delete timer and return false */ 
     delete caller.sleepTimer; 
     return true; 
    } 

    /* Create timer and re-call caller at expiry */ 
    caller.sleepTimer = window.setTimeout (function() { 
     caller.apply (obj || null, args || []); 
    },ms); 

    return false; 
    }  

उपयोग के उदाहरण:

function delayed() { 
    if (!sleep (5000)) return; 

    document.body.innerHTML += "<p>delayed processing</p>"; 
} 

function delayed_args (a, b) { 
    if (!sleep (10000, arguments)) return; 

    document.body.innerHTML += "<p>args : (" + a + ", " + b + ")</p>"; 
} 

function delayed_method_args (a,b) { 
    if (!sleep (20000, arguments, this)) return; 

    document.body.innerHTML += "<p>method_args " + this + " (" + a + ", " + b + ")</p>"; 
} 

ओपेरा और Firefox 3,0

3
1 var chkResult = Validation(); 
    2 alert("wait ten seconds, then press ok"); 
    3  
    4 document.getElementById('abc').innerHTML = chkResult; 

पूर्ववर्ती कोड प्रतिनिधियों नींद पर परीक्षण किया गया समानांतर प्रोसेसर के लिए कार्य। यह थोड़ा गन्दा है क्योंकि आपको थ्रेडिंग की इस शैली के लिए एक डीएसएल का उपयोग करना है।

+0

+1। – anddoutoi

0

जावास्क्रिप्ट को ब्राउज़र के साथ थ्रेड साझा करना है, इसलिए आप जिस तरह की रोकथाम चाहते हैं, वह ब्राउज़र की तरह 10 सेकंड के लिए जमे हुए था, यह संभव था। "चेतावनी" और "प्रॉम्प्ट" जैसे कार्य ऐसा करते हैं। इसके लिए, वे बुरे हैं, क्योंकि एक लूप में एक चेतावनी पूरे ब्राउज़र को अपने घुटनों पर ला सकती है, और इसे छोड़ने के लिए एकमात्र तरीका है।

इस समस्या के आसपास का तरीका घटना आधारित प्रतिमान है। जावास्क्रिप्ट में प्रथम श्रेणी के फ़ंक्शन हैं, इसलिए उन्हें "कॉलबैक" के मानों के रूप में पारित किया जा सकता है जिन्हें आप कुछ ईवेंट को असाइन कर सकते हैं।

सेटटाइमआउट एक ऐसी घटना है। अन्य ने कोड पोस्ट किया है, लेकिन सामान्य रूप से, आप केवल अपने कार्यों को कुछ घटनाओं में असाइन करना चाहते हैं, फिर ब्राउज़र के रास्ते से बाहर निकलें, इसलिए यह अपने browsery व्यवसाय के बारे में जा सकता है।कुछ ऐसा होने पर ब्राउज़र आपको बताएगा, और आप प्रतिक्रिया में कुछ उचित कर सकते हैं, जल्दी से, फिर से रास्ते से बाहर निकलें। इस तरह, ब्राउज़र उत्तरदायी होने की उपस्थिति को बनाए रख सकता है।

यदि आप और अधिक जानना चाहते हैं, इस सवाल पर एक नजर है: How is GUI and Game Program Flow compared to Web programs

0

लेकिन इस तरह से, अपनी लाइन लाइन लाइन से पहले निष्पादित करेंगे 4

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