本文同步自我的個人博客: http://mly-zju.github.io/
眾所周知javascript語言的一大特色就是異步,這既是它的優(yōu)點,同時在某些情況下也帶來了一些的問題。最大的問題之一,就是異步操作過多的時候,代碼內(nèi)會充斥著眾多回調(diào)函數(shù),乃至形成回調(diào)金字塔。為了解決回調(diào)函數(shù)帶來的問題,Promise作為一種更優(yōu)雅的異步解決方案被提出,最初只是一種實現(xiàn)接口規(guī)范,而到了es6,則是在語言層面就原生支持了Promise對象。
最初接觸Promise的時候,我覺得它是比較抽象并且令人困惑的,相信很多人也有同樣的感覺。但是在后來的熟悉過程中,我慢慢體會到了它的優(yōu)雅,并開始思考Promise對象實現(xiàn)的原理,最終用es5語法實現(xiàn)了一個具備基本功能的自己的Promise對象。在這篇文章中,會把自己實現(xiàn)的過程和思路循序漸進(jìn)的記錄一下,相信大家看完之后,也能夠徹底理解Promise對象運(yùn)行的原理,并在以后的開發(fā)中,能更熟練的使用它。
github源碼地址: https://github.com/mly-zju/Js-practice
1. 回到過去: resolve, reject和then
首先來看一個Promise的使用實例:
var fn=function(resolve,&n