Promise简单实现
前言
你可能知道,javascript的任务执行的模式有两种:同步和异步。异步模式非常重要,在浏览器端,耗时很长的操作(例如ajax请求)都应该异步执行,避免浏览器失去响应。
在异步模式编程中,我们经常使用回调函数。一不小心就可能写出以下这样的代码:
1 | //事件1 |
当你的需要异步执行的函数越来越多,你的层级也会越来越深。
这样的写法存在的缺点是:
- 不利于阅读
- 各个任务之间的高度耦合,难以维护
- 对异常的处理比较难
用Promise可以避免这种回调地狱,可以写成这样
1 | //事件1 |
在市面上有许多库都实现了Promise,例如:Q.js 、when.js ,es6也将Promise纳入了标准中
es6 的 Promise使用方法可以参考阮一峰的 http://es6.ruanyifeng.com/#docs/promise ,我就不在做具体介绍
接下来,我们模仿ES6的promise,一步一步来实现一个简单版的Promise。
构造函数
我们使用Promise的时候,
1 | const promise = new Promise((resolve, reject)=>{ |
Promise是一个构造函数,接收一个函数,函数里有两个参数,resolve、reject。