上篇文章我们用高阶函数(函数柯里化)实现并发文件读取流、写入流
今天,我们用另外一种方法实现:
let fs = require('fa')
// 写一个通用的读取函数,返回promise对象
function getFile(filename) {
return new Promise(resolve => {
// 创建读取函数
let readerStream = fs.createReadStream(fileName)
// 设置编码
readerStream .setEncoding('UTF8')
// 读取数据流
readerStream .on("data",chunk=>resolve(chunk))
})
}
利用Promise.all() 并发读取后写入
Promise.all([getFile('first.txt'),getFile('second.txt'),getFile('three.txt')])
.then(res => {
// 创建fs写入数据流(output.txt)
let writerStream = fs.createWriteStream('output.txt')
// 遍历读取的结果并且写入到output.txt
res.forEach(item => writerStream.write(item, 'UTF8'))
// 写入结果
writerStream.end(() => {
// 输出文件内容
fs.readFile('output.txt', (err,data) => {
console.log('并发写入成功')
console.log(data.toString()) // 隐式类型转换
})
})
})
结果
附文章: