上篇文章我們用高階函數(函數柯里化)實現併發文件讀取流、寫入流
今天,我們用另外一種方法實現:
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()) // 隱式類型轉換
})
})
})
結果
附文章: