Skip to content

Instantly share code, notes, and snippets.

@norbornen
Last active October 15, 2018 08:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save norbornen/8ff7e20803544b21d232c120ac0777ca to your computer and use it in GitHub Desktop.
Save norbornen/8ff7e20803544b21d232c120ac0777ca to your computer and use it in GitHub Desktop.
node.js stream with promisified reading (vanilla)
const fs = require('fs');
const path = require('path');
const testfile = path.join(path.resolve(), 'test.txt');
read(testfile);
async function read(filepath) {
const rstream = fs.createReadStream(filepath, {highWaterMark: 70, encoding: 'utf-8'});
let data;
let reader = readStream(rstream);
while(null !== (data = await reader())) {
console.log('data=' + data);
}
console.log('done');
}
function readStream(rstream) {
let def;
rstream.on('error', (err) => {
console.error(err);
def && def.resolve(null);
});
rstream.on('end', () => def && def.resolve(null));
rstream.on('data', (x) => def && def.resolve(x || ''));
return () => {
def = deferred();
return def.promise;
};
}
function deferred() {
let resolve;
let reject;
const promise = new Promise((resolveFn, rejectFn) => {
resolve = resolveFn;
reject = rejectFn;
});
return {promise, resolve, reject};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment