Skip to content

Instantly share code, notes, and snippets.

@danielecr
Created December 11, 2019 16:55
Show Gist options
  • Save danielecr/f6dc09d7e5ad083540f618927c969fc4 to your computer and use it in GitHub Desktop.
Save danielecr/f6dc09d7e5ad083540f618927c969fc4 to your computer and use it in GitHub Desktop.
Some code to show events in stream
example text data to copy from
execute
> node stream-to-target.spec.js
to read:
"""
read stream end
write stream finish ./tgt_data.txt
read stream close
write stream close ./tgt_data.txt
success ./tgt_data.txt
data
"""
const fs = require('fs')
const streamToTarget = (stream, targetFile) => new Promise((resolve,reject) => {
stream.on('end', ()=> {
console.log('read stream end');
//resolve(targetFile);
});
stream.on('close', ()=> {
console.log('read stream close');
//resolve(targetFile);
});
stream.on('error',(err) => {
console.log('read stream error',err)
reject(`error on read stream ${err.toString()}`);
})
let ws_target = fs.createWriteStream(targetFile)
ws_target.on('error', (err) => {
console.log('write stream err',err)
reject(`error on stream target stream ${targetFile} ${err.toString()}`);
})
ws_target.on('finish', ()=> {
console.log(`write stream finish ${targetFile}`);
//resolve(targetFile);
});
ws_target.on('close', ()=> {
console.log(`write stream close ${targetFile}`);
resolve(targetFile);
});
stream.pipe(ws_target);
})
module.exports = streamToTarget;
const fs = require('fs')
const streamToTarget = require('./stream-to-target');
const source = './src_data.txt';
const target = './tgt_data.txt'
let stream = fs.createReadStream(source);
setTimeout(()=>console.log('data'), 2000);
return streamToTarget(stream,target)
.then(msg=>console.log(`success ${msg}`))
.catch(err=>console.error(`error: ${err}`));
@kaushik-raina
Copy link

setTimeout(()=>console.log('data'), 2000);

Why this line?

@danielecr
Copy link
Author

setTimeout(()=>console.log('data'), 2000);

Why this line?

just to cheer "data". No, just to print something at the end, I am assuming here that 2 second is enough to make the work.

The only point here were to show that when using .pipe() read stream end, then write stream finish, then read stream close, then write stream close. And this sequence make sense

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment