【相關學習推薦:#javascript影片教學】
許多JavaScript 的初學者都曾感受過被回調地獄支配的恐懼,直到掌握了Promise 文法才算解脫。雖然很多語言都早已內建了Promise ,但是JavaScript 中真正將其發揚光大的還是jQuery 1.5 對$.ajax
的重構,支援了Promise,而且用法也和jQuery 推崇的鍊式呼叫不謀而合。後來 ES6 出世,大家才開始進入全民 Promise 的時代,再後來 ES8 又引進了 async 文法,讓 JavaScript 的非同步寫法更加優雅。
今天我們就一步一步實現一個 Promise,如果你還沒用過 Promise,建議先熟悉一下 Promise 語法再來閱讀本文。
在已有的
Promise/A
規範中並沒有規定promise 物件從何而來,在jQuery 中透過呼叫$.Deferred()
得到promise 對象,ES6 中透過實例化Promise 類別得到promise對象。這裡我們使用 ES 的語法,建構一個類,透過實例化的方式返回 promise 對象,由於 Promise 已經存在,我們暫時給這個類別取名為 Deferred
。
class Deferred { constructor(callback) { const resolve = () => { // TODO } const reject = () => { // TODO } try { callback(resolve, reject) } catch (error) { reject(error) } } }复制代码
建構子接受一個 callback,呼叫 callback 的時候需傳入 resolve、reject 兩個方法。
Promise 一共分為三個狀態:
實現Promise的手把手教程
:等待中,這是Promise 的初始狀態;
以上是實現Promise的手把手教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!