本文同步自我的個(gè)人博客: http://mly-zju.github.io/

眾所周知javascript語言的一大特色就是異步,這既是它的優(yōu)點(diǎn),同時(shí)在某些情況下也帶來了一些的問題。最大的問題之一,就是異步操作過多的時(shí)候,代碼內(nèi)會(huì)充斥著眾多回調(diào)函數(shù),乃至形成回調(diào)金字塔。為了解決回調(diào)函數(shù)帶來的問題,Promise作為一種更優(yōu)雅的異步解決方案被提出,最初只是一種實(shí)現(xiàn)接口規(guī)范,而到了es6,則是在語言層面就原生支持了Promise對(duì)象。

最初接觸Promise的時(shí)候,我覺得它是比較抽象并且令人困惑的,相信很多人也有同樣的感覺。但是在后來的熟悉過程中,我慢慢體會(huì)到了它的優(yōu)雅,并開始思考Promise對(duì)象實(shí)現(xiàn)的原理,最終用es5語法實(shí)現(xiàn)了一個(gè)具備基本功能的自己的Promise對(duì)象。在這篇文章中,會(huì)把自己實(shí)現(xiàn)的過程和思路循序漸進(jìn)的記錄一下,相信大家看完之后,也能夠徹底理解Promise對(duì)象運(yùn)行的原理,并在以后的開發(fā)中,能更熟練的使用它。

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

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

首先來看一個(gè)Promise的使用實(shí)例:

var fn=function(resolve,&n
        
		

網(wǎng)友評(píng)論