2011-05-07 17 views
7

मैं इतना है कि यह एक धारा गतिरोध के मामले में हमेशा के लिए नहीं रहेंगे इस प्रक्रिया को करने के लिए एक घंटे का समय समाप्त जोड़ना चाहते हैं नहीं रखता। एकमात्र समस्या यह है कि अगर मैं सेटटाइम कहता हूं, तो प्रक्रिया के समय से पहले समाप्त होने का कोई मौका नहीं है।Node.js: setTimeout कि प्रक्रिया चल

प्रक्रिया को जारी किए बिना, लगभग एक घंटे बाद मजबूर निकास टाइमआउट में डालने का कोई तरीका है? या मैं process.exit का उपयोग करके और इस टाइमआउट के बिना कर रहा हूं?

उत्तर

12

मुझे नहीं पता कि unref को नोड में जोड़ा गया था लेकिन यह अब एक संभावित समाधान है।

var timeoutId = setTimeout(callback, 3600000); 
timeoutId.unref(); // Now, Node won't wait for this timeout to complete if it needs to exit earlier. 

दस्तावेज़ का कहना है:: मैट कोड पुनर्प्रयोग

setTimeout के मामले में जब तुम तो आपको एक अलग टाइमर है कि घटना पाश wakeup बनाने unref, इनमें से भी कई बनाने प्रभाव घटना पर प्रतिकूल हो सकता है लूप प्रदर्शन - बुद्धिमानी से उपयोग करें।

इसके साथ सूअर जंगली मत जाओ।

+1

अच्छा, मैंने इसके बारे में नहीं सुना था। ['unref' नोड 0.9.1 में जोड़ा गया था।] (https://github.com/joyent/node/releases/tag/v0.9.1) –

5

आप setTimeout द्वारा दिए गए मान को सहेजते हैं तो आप हमेशा इसे रद्द कर सकते से पहले ही, clearTimeout साथ आग इस तरह:

var timeoutId = setTimeout(callback, 3600000); // 1 hour 

// later, before an hour has passed 
clearTimeout(timeoutId); 
+0

मैं ऐसी चीज़ की उम्मीद कर रहा था जिसके लिए 'clearTimeout' की आवश्यकता नहीं थी। मैं बिना करूँगा –

1

संभव समाधान का उपयोग कर एक new feature कि was implemented रूप process.watchers(), लेकिन मैं चाहे पता नहीं है इसे अभी तक एक जारी संस्करण में शामिल किया गया था। इस पोस्ट के रूप में pull request अभी भी खुला है।

लेकिन आम तौर पर बोलते हुए, आप एक कस्टम setTimeout फ़ंक्शन लिखेंगे जो काउंटर पर सभी टाइमआउट जोड़ता है, और कॉलबैक पर टाइमआउट से ठीक पहले, यह काउंटर से हटा देगा।

तो चल रहे एक अंतराल बनाते हैं, और अंतराल की जाँच करें और नोटिस जब सभी वॉकर सिर्फ अपने कस्टम समारोह द्वारा निर्धारित समय समाप्ति रहे हैं।

जब यह नोटिस करता है, तो यह होगा (उन सभी टाइमआउट को साफ़ करें, जिससे ए) बाहर निकलें।

निश्चित रूप से

इसका कारण यह है

  • अवधारणा साबित नहीं है, महान नहीं है। (मैं डेटा की किस तरह process.watchers() द्वारा लौटा दी जाएगी पता नहीं है, या यह भी अभी तक काम करता है)
  • अंतराल एक मतदान विधि है। (अच्छा नहीं है यदि आप कम CPU उपयोग के रूप में तत्काल वापसी चाहते हैं)