核心模块
- node自带的模块
util
- util util.inherits
- util.promisify
1)promisify
- ncp 拷贝的一个模块
- 先初始化环境 npm init
- 安装ncp yarn add ncp
1 | let ncp = require('ncp'); // 第三方库 |
现在希望能转化成下面这种形式
1 | (async()=>{ |
手写原理
1 | let ncp = require('ncp'); // 第三方库 |
2) inherits
node内部不是用es6写的 好多方法都是用es5来写的, 实现类的继承
1 | function Parent() { |
events
- 事件触发器
发布订阅模块
示例
1 | let EventEmitter = require('events'); |
1 | // 1.events.js |
手写events模块
1 | // events.js |
Tips
- Object.create(null); 这样创建的对象是没有属性的 可以直接在浏览器打印
- {} 这样创建的对象有一堆属性
newListener
1 | //let EventEmitter = require('./events'); |
比如说现在想要监听失恋这个事件
1 | let EventEmitter = require('events'); |
解决办法如下 nextTick
1 | let EventEmitter = require('events'); |
如果绑定2个失恋事件
1 | let EventEmitter = require('events'); |
分析: line18绑定到数组中{‘失恋’:[fn]},绑定一次执行一次line8,line21绑定到数组中{‘失恋’: [fn,fn]},on绑定一次,line8执行一次,因为line12是异步的,同步执行完之后line12执行,刚才line8执行了2次(线程里存储了2个微任务),所以line12这里也执行2次,这样一共就四次了。
once 解决
1 | let EventEmitter = require('events'); |
off 解除绑定
1 | let EventEmitter = require('./events'); |
手写events 优化
1 | function EventEmitter(){ |
node事件绑定 核心模块
on 、emit 、once 、newListener 、off