19 # promisify:将回调方法 promise 化

之前写个单独的方法去处理文件读取

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);
});

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kaimo313/article/details/130818589