Node promisify介绍经典的闭包实现

我理解的是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);
        });
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原本想稍微整理一下 ES 新特性,没想到花了相当多的时间,本文也巨长,依然推荐使用 简悦[https://gith...
    401阅读 4,881评论 0 2
  • Node全栈技术开发介绍 node和js介绍 node服务端开发 node前端vuejs node前端reactj...
    燕京博士阅读 9,049评论 1 19
  • 0.链接 状态码精选 https://www.cnblogs.com/yaya-003/p/12653602.ht...
    蛋挞xjc阅读 3,379评论 0 0
  • 0. 前言 如今nodejs变得越来越火热,采用nodejs实现前后端分离架构已被多数大公司所采用。 在过去,使用...
    sessionboy阅读 23,317评论 14 123
  • 设计高性能Web服务器的要点在于非阻塞I/O和事件驱动 Node最大的特点是异步式I/O(非阻塞I/O)与事件紧密...
    JunChow520阅读 6,172评论 0 0