Promise原理实现(一):前置知识点
实现promise首先需要了解如下知识点:
1: 高阶函数 (一个函数作为另外一个函数的参数,这个包含的函数就是高阶函数): outer是一个高阶函数,inner函数作为一个参数传递;此处也是闭包的应用;foo() bar()的执行可以称为切片编程:AOP, 在逻辑执行前加入了某些执行逻辑,切片编程
function outer(inner){ bar() return (...args) => {
foo()
// ...
inner()
this(...args)
} } function inner(){ // xxx }
2: 发布订阅
const middle = { // 可以看成发布订阅的一个中介对象,存储发布和订阅方法以及事件池 arr: [], // 事件池 on(fn) { // 订阅事件:也可以叫做存储事件到事件池中 this.arr.push(fn) }, emit(fn){ // 发布事件: 执行订阅的方法 this.arr.forEach(fn => fn()) } } // 例如我要 读取2个文件,打开后需要知道是否读取完毕 const fs = require('fs')
event.on(function() { console.log('读了一个') }) event.on(function() { Object.keys.forEach(key => { if(key.length === 2){ // 读取完毕 } }) }) let filecontent = {} fs.readFile('./aa.txt',function(err,data){ filecontent.name = data middle.emit() }) fs.readFile('./bb.txt',function(err,data2){ filecontent.age = data2 middle.emit() })
3: promise A+ 规范和promise 的基本用法;