2012-09-20 12 views

उत्तर

9

process.stdoutWritableStream ऑब्जेक्ट है, और विधि WritableStream.write() स्वचालित रूप से स्ट्रीम को फ़्लश करती है (जब तक यह स्पष्ट रूप से कॉर्क नहीं किया जाता)। हालांकि, फ्लश सफल होने पर यह सच हो जाएगा, और कर्नेल बफर भरने पर गलत होगा और यह अभी तक नहीं लिख सकता है। यदि आपको उत्तराधिकार में कई बार लिखना है, तो आपको drain ईवेंट को संभालना चाहिए।

the documentation for write देखें।

1

write डेटा 0 flदेता है यदि डेटा फ़्लश किया गया है। यदि यह false देता है, तो आप 'नाली' ईवेंट की प्रतीक्षा कर सकते हैं।

मुझे लगता है कि flush नहीं है, क्योंकि यह एक अवरुद्ध ऑपरेशन होगा।

+0

स्ट्रीम नहीं देखेंगे डाल है स्थिति कर्सर ले जाने के होगा .write() पहले से ही एक अवरुद्ध ऑपरेशन है। – jrajav

+0

@ क्यूरा लगभग सही। Stream.write अवरुद्ध नहीं है लेकिन stdout के लिए यह आमतौर पर है: http://nodejs.org/api/process.html#process_process_stdout धन्यवाद, उसे नहीं पता था। – Ishtar

+0

मैं देखता हूं। मैं ईमानदार होने के लिए वास्तव में किसी भी तरह से नहीं जानता था, लेकिन मुझे लगता है कि इसे कम से कम उस बिंदु पर अवरुद्ध करना होगा जिसे उसने कर्नेल बफर को लिखा था। मुझे लगता है कि नोड के अनुसार गिनने के लिए "पर्याप्त अवरुद्ध" नहीं है। :) – jrajav

3

नए NodeJS संस्करणों में, आप, .write() को एक कॉलबैक पारित कर सकते हैं जो एक बार डेटा प्लावित है बुलाया जाएगा:

sys.stdout.write('some data',() => { 
    console.log('The data has been flushed'); 
}); 

यह ठीक .write() परिणाम जाँच और drain घटना के लिए पंजीकरण के रूप में ही है:

var write = sys.stdout.write('some data'); 
if (!write) { 
    sys.stdout.once('drain',() => { 
    console.log('The data has been flushed'); 
    }); 
} 
-1

एक और समारोह stdout जो टर्मिनल के लिए पिछले उत्पादन स्पष्ट करने के लिए जो flush

की तरह जिस तरह का काम है नहीं है
function flush() { 
    process.stdout.clearLine(); 
    process.stdout.cursorTo(0); 
} 

var total = 5000; 
var current = 0; 
var percent = 0; 
var waitingTime = 500; 
setInterval(function() { 
    current += waitingTime; 
    percent = Math.floor((current/total) * 100); 
    flush(); 
    process.stdout.write(`downloading ... ${percent}%`); 
    if (current >= total) { 
     console.log("\nDone."); 
     clearInterval(this); 
    } 
}, waitingTime); 

cursorTo0 जो प्रारंभिक बिंदु

stdout.write से पहले flush फ़ंक्शन का उपयोग करें, क्योंकि यह स्क्रीन साफ ​​हो जाएगा, यदि आप के बाद आप किसी भी उत्पादन

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