Skip to content

Promise 实践练习-fs 读取文件

注意

以下代码需要在 node.js 中运行

原始方法

js
const fs = require('fs');

//content.txt  你好!
fs.readFile('./content.txt', (err, data) => {
	//如果出错,则抛出错误
	if (err) throw err;
	//输出文件内容
	console.log(data); // <Buffer e4 bd a0 e5 a5 bd ef bc 81>
});

改造 Promise 形式

js
const fs = require('fs');

const p = new Promise((resolve, reject) => {
	//content.txt  你好!
	fs.readFile('./content.txt', (err, data) => {
		//如果出错,则抛出错误
		if (err) reject(err);
		//输出文件内容
		resolve(data); // <Buffer e4 bd a0 e5 a5 bd ef bc 81>
	});
});

p.then(
	value => {
		console.log(value); // <Buffer e4 bd a0 e5 a5 bd ef bc 81>
	},
	reason => {
		console.log(reason);
	}
);

封装 Promise 调用

js
function mineReadFile(path) {
	return new Promise((resolve, reject) => {
		//读取文件
		require('fs').readFile(path, (err, data) => {
			//判断
			if (err) reject(err);
			//成功
			resolve(data);
		});
	});
}

mineReadFile('./content.txt').then(
	value => {
		console.log(value); // <Buffer e4 bd a0 e5 a5 bd ef bc 81>
	},
	reason => {
		console.log(reason);
	}
);

使用 Node 中的 util.promisify()方法的基本使用和实现

js
//引入util模块
const util = require('util');
//引入 fs 模块
const fs = require('fs');
//返回一个新的函数
let mineReadFile = util.promisify(fs.readFile);

mineReadFile('./content.txt').then(
	value => {
		console.log(value); //<Buffer e4 bd a0 e5 a5 bd ef bc 81>
	},
	reason => {
		console.log(reason);
	}
);

Released under the MIT License.