使用场景
有一个很大的文件500M左右, 需要将里面的数据读出来, 进行处理, python有直接可以读行的函数, js的回调方式写起来很不舒服, 在这里使用rxjs封装一下
封装一个函数, 传入文件地址, 然后返回一个流, 流中的数据就是每行数据的结果
注意要在流结束的时候关闭流和取消事件监听
const fs = require('fs')
const readline = require('readline')
const {fromEventPattern} = require('rxjs')
const {take, finalize} = require('rxjs/operators')
function getLines(filePath) {
const stream = fs.createReadStream(filePath)
const rl = readline.createInterface({
input: stream
});
return fromEventPattern(
handler => {
rl.on('line', (...args) => {
console.log('read line')
handler(...args)
});
},
handler => {
rl.on('close', (...args) => {
console.log('close', ...args)
handler(...args)
});
}
).pipe(
finalize(() => {
console.log('finalize')
stream.close()
rl.removeAllListeners()
rl.close()
}
));
}
let p = './t.txt'
getLines(p).pipe(
take(3)
).subscribe(
line => {
console.log('line', line)
}
)
来源:oschina
链接:https://my.oschina.net/ahaoboy/blog/3170761