本文同步自我的个人博客: http://mly-zju.github.io/

众所周知javascript语言的一大特色就是异步,这既是它的优点,同时在某些情况下也带来了一些的问题。最大的问题之一,就是异步操作过多的时候,代码内会充斥着众多回调函数,乃至形成回调金字塔。为了解决回调函数带来的问题,Promise作为一种更优雅的异步解决方案被提出,最初只是一种实现接口规范,而到了es6,则是在语言层面就原生支持了Promise对象。

最初接触Promise的时候,我觉得它是比较抽象并且令人困惑的,相信很多人也有同样的感觉。但是在后来的熟悉过程中,我慢慢体会到了它的优雅,并开始思考Promise对象实现的原理,最终用es5语法实现了一个具备基本功能的自己的Promise对象。在这篇文章中,会把自己实现的过程和思路循序渐进的记录一下,相信大家看完之后,也能够彻底理解Promise对象运行的原理,并在以后的开发中,能更熟练的使用它。

github源码地址: https://github.com/mly-zju/Js-practice

1. 回到过去: resolve, reject和then

首先来看一个Promise的使用实例:

var fn=function(resolve,&n