Node promisify介绍经典的闭包实现

2022-12-21  本文已影响0人  萘小蒽

我理解的是promisify是用来处理回调问题的,就这么简单。

ES6 ES7出现了一批处理异步的函数,Promise Generator ansyc/await;

比如在ES6之前我们读写文件就是依赖回调

var  fs = requier('fs')
fs.readFile('./index.vue',(err,data)=>{
    console.log(data.toString())
})

promisify

const fs = require('fs');
const {promisify} = require('util');
const readFile = promisify(fs.readFile);
( ansyc()=>{   //模拟使用场景
  const data = await readFile('./index.vue');
})

promisify实现

function promisify(fn) {
    console.log(fn,"fn"); // 保存的是原始函数(add)
    return function (...args) {
        console.log(...args,"...args"); // 2 6 保存的是调用时的参数
        //返回promise对象
        return new Promise(function (resolve, reject) {
            // 将callback放到参数末尾,并执行callback函数
            args.push(function (err, ...arg) {
                console.log('..............arg',arg)
                if (err) {
                    reject(err);
                    return;
                }
                resolve(...arg);
            });

            fn.apply(null, args);
        });
    }
}
上一篇 下一篇

猜你喜欢

热点阅读