2013-03-29 8 views
10

मैं जावास्क्रिप्ट 'प्रतीक्षा' फ़ंक्शन बनाना चाहता हूं। मुझे क्या संपादित करना चाहिए?जावास्क्रिप्ट प्रतीक्षा() फ़ंक्शन

function wait(waitsecs){ 
setTimeout(donothing(), 'waitsecs'); 
} 

function donothing() { 

} 
+0

आप शायद 'सेटटाइमआउट (डोनिंग(), वेटसेक्स) का मतलब था;' लेकिन मुझे नहीं पता कि इसका क्या मतलब है। 'setTimeout' अवरुद्ध नहीं होता है, और आपको स्पिन-प्रतीक्षा नहीं बनाना चाहिए। http://stackoverflow.com/q/951021/139010 –

+0

एक बेहतर सवाल यह है कि * क्यों * आप 'प्रतीक्षा' समारोह चाहते हैं? –

+0

यह कोड डोनिंग * तत्काल * कहता है और एक स्ट्रिंग में गुजरता है, पैरामीटर के मान नहीं। 'सेटटाइमआउट (डोनिंग, वेटसेक्स)' एक बेहतर प्रयास होगा .. एक मूर्ख रैपर। –

उत्तर

38

जावास्क्रिप्ट को थ्रेड नहीं किया गया है, इसलिए एक "प्रतीक्षा" पूरे पृष्ठ को स्थिर कर देगा (और शायद ब्राउज़र को स्क्रिप्ट को पूरी तरह से चलाना बंद कर देगा)।

विशेष रूप से आपकी समस्या का समाधान करने के लिए, आप अपने setTimeout कॉल में donothing के बाद कोष्ठक को दूर करना चाहिए, और waitsecs एक नहीं नंबर एक स्ट्रिंग बनाने:

console.log('before'); 
setTimeout(donothing,500); // run donothing after 0.5 seconds 
console.log('after'); 

लेकिन उस निष्पादन बंद नहीं होगा; आपके फ़ंक्शन चलाने से पहले "बाद" लॉग हो जाएगा।

ठीक से इंतजार करने के लिए, आप गुमनाम कार्यों का उपयोग कर सकते हैं:

console.log('before'); 
setTimeout(function(){ 
    console.log('after'); 
},500); 

सभी अपने चर अभी भी "के बाद" खंड में किया जाएगा। आपको इन्हें चेन नहीं करना चाहिए - अगर आपको खुद को ढूंढने की ज़रूरत है, तो आपको यह देखने की ज़रूरत है कि आप प्रोग्राम को कैसे बना रहे हैं। इसके अलावा यदि आप लूप की आवश्यकता है तो setInterval/clearInterval का उपयोग करना चाह सकते हैं।

+1

क्या एक साधारण कोड है! :) –

4

आपको इसे संपादित नहीं करना चाहिए, आपको इसे पूरी तरह से स्क्रैप करना चाहिए।

कुछ निश्चित समय के लिए निष्पादन रोकने का कोई भी प्रयास ब्राउज़र को लॉक कर देगा और इसे उत्तर देने वाले राज्य में स्विच नहीं करेगा। केवल एक चीज जो आप कर सकते हैं setTimeout सही ढंग से उपयोग कर सकते हैं।

+0

+1 यह बेहतर उत्तर है। – Sajmon

+14

मुझे लगता है [डेव का जवाब] (http://stackoverflow.com/a/15694534/53926) बेहतर है। कम स्नैक्स और असली सलाह। – Xavi

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