之前写个单独的方法去处理文件读取
function read(filename) { return new Promise((resolve, reject) => { fs.readFile(filename, "utf-8", function (err, data) { if (err) reject(err); resolve(data); }); }); }
将 node 的 api 快速的转化成 promise 的形式
const fs = require("fs").promises; fs.readFile("./file/age.txt", "utf-8").then((data) => { console.log("data---->", data); });
这里使用 promises,fs.readFile
返回的是一个 promise
或者可以使用 node 的 util 工具里的 promisify 方法将回调方法 promise 化
const fs = require("fs"); const util = require("util"); let read = util.promisify(fs.readFile); read("./file/name.txt", "utf-8").then((data) => { console.log("data---->", data); });
实现一个 promisify 转换 node api 的方法
// 这里可以简写去掉return,(fn) => (...args) => new Promise,我这里就保留方便理解 const promisify = (fn) => { return (...args) => { return new Promise((resolve, reject) => { fn(...args, function (err, data) { if (err) reject(err); resolve(data); }); }); }; };
测试
const fs = require("fs"); let read = promisify(fs.readFile); read("./file/name.txt", "utf-8").then((data) => { console.log("data---->", data); });