Node.js 利用Promise對象併發寫入流、讀取流(Stream)

上篇文章我們用高階函數(函數柯里化)實現併發文件讀取流、寫入流

今天,我們用另外一種方法實現:

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()) // 隱式類型轉換
			})
		})
	})

結果
在這裏插入圖片描述
附文章:

Node.js 利用高階函數 ( 柯里化 ) 併發寫入流、讀取流(Stream)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章