srcStream.on('data', data => { const canContinue = destStream.write(data) if (!canContinue) { // we are overflowing the destination, we should pause srcStream.pause() // we will resume when the destination stream is drained destStream.once('drain', () => srcStream.resume()) } })
resume() { if (!this._stream) return this._paused = false this._stream.resume() this._readFromOffsetUntilEof() }
continue () { this.reader.resume() }
writeStream.on('drain', function() { console.log('data drains'); readStream.resume(); });
async function slimCode(ext, outdir, tgz, slim) { const outfile = path.join(outdir, `slim.code${ext}.txt`); const out = packedOut(outfile, config.extract.compress); const entries = slim.filter(entry => entry.endsWith(ext)); for (const entry of entries) { const stream = fs.createReadStream(path.join(config.dir, 'tmp', entry)); const resume = () => stream.resume(); out.on('drain', resume); let num = 0; readline.createInterface({ input: stream }).on('line', line => { num++; if (line.length > 500) return; if (!/[^\s]/.test(line)) return; const ready = out.write(`${entry}:${num}:${line}\n`); if (!ready) stream.pause(); }); await promiseEvent(stream, 'end'); out.removeListener('drain', resume); } out.end(); await promiseEvent(out, 'close'); }
readStream .on('data', function(chunk) { n++; console.log('data emits'); console.log(Buffer.isBuffer(chunk)); //true // console.log(chunk.toString('utf8')); // js content readStream.pause(); console.log('data pause'); setTimeout(function() { console.log('data pause end'); readStream.resume(); }, 3000); }) .on('readable', function() { console.log('data readable'); }) .on('end', function() { console.log(n); console.log('data ends'); }) .on('close', function() { console.log('data close'); }) .on('error', function(e) { console.log('data read error' + e); });
http.createServer(function(request, response) { var rs = fs.createReadStream('./test.txt'); rs.on('data', function (data){ console.log('started the stream'); if (!response.write(data)){ rs.pause(); } }); res.on('drain', function(data){ rs.resume(); }); rs.on('end', function (){ console.log(response.body.toString()); response.end(); }); function respond(code, body, type) { if (!type) type = "text/plain"; response.writeHead(code, {"Content-Type": type}); if (body && body.pipe) body.pipe(response); else response.end(body); } if (request.method in methods) methods[request.method](urlToPath(request.url), respond, request); else respond(405, "Method " + request.method + " not allowed."); }).listen(8000);
this.on('resume', function () { localStream.resume(); });
srcStream.on('data', data => { const canContinue = gzipStream.write(data) if (!canContinue) { srcStream.pause() gzipStream.once('drain', () => { srcStream.resume() }) } })