理解 ES6 中的 Promise

這篇文章我嘗試從感性的角度來理解一下 Promise,舉一個栗子。
小明來到火車站,跟售票員說:“我要一張廣州到杭州的高鐵票”,售票員說:“你等等,我查一下!”
上面這個場景,售票員對小明說的這句話就是一個 “承諾” ,告訴小明,我會替你查一下,看看有沒有,如果有余票,就告訴你有,沒有就告訴你沒有。
那么,小明是怎么得到這個 “承諾” 的呢?
小明得到這個“承諾”是因為小明告訴了售票員,他要一張火車票。
創建 Promise 實例
那么,在 JavaScript 里要得到一個 Promise 要怎么做呢?答案就是創建一個 Promise 實例。
下面,我們可以來看一下語法了
var promise = new Promise(executor)
var promise = new Promise(function(resolve, reject){ ... })
executor (遺囑執行者),這是個很形象地參數名。
- executor 是一個函數,帶有 resolve 、 reject 兩個參數
- executor 在創建實例的時候立即執行
- executor 在執行的時候會把并把 成功回調函數 和 失敗回調函數 作為參數傳遞進來,賦值給 resolve 和 reject
- executor 里面調用 resolve 和 reject 會分別觸發 promise 的 成功 或 失敗
有同學可能會問,創建一個 Promise 實例跟小明買票有什么關系?
現在我們用代碼來描述一下小明買票的故事。
/*
* 比如說寫代碼的人 我 是 小明
* Promise實例 是 “承諾”
* executor 就是 售票員
*/
// 我是小明,我要買票,你幫我查查有沒有票
var promise = new Promise(function (resolve, reject){
// 先起來去喝個水
drink()
// 吃個飯
eat()
// 現在搜一下 廣州到杭州 的車票
var result = search('廣州-杭州')
// 如果搜到有車票,就告訴小明有票
if (result !== null) {
resolve()
}
// 如果沒有搜到車票,就告訴小明沒有票了
else {
reject()
}
})
小明說要買票,售票員馬上就告訴小明“你等等,我查一下!”,給了他這個承諾,這個過程是同步的。而售票員給了小明這個承諾之后,再到告訴小明有票還是沒票,這個過程明顯是異步的,因為中間售票員還去了喝水吃飯…,查票也需要時間;也可以是同步的,售票員聽到之后馬上告訴小明,沒票了~~
executor 做的事情跟售票員很像,就是將 Promise實例 的狀態變為 成功 或者 失敗 ,在此之前可以執行任何操作(只要不報錯~~);就像售票員一樣,就是要告訴小明有票還是沒票,他中間可以做任何事情。
Promise.prototype.then
看到這里,或許大家都會有個疑問:小明被告知有票或者沒票之后可以做什么?
來自:http://mertensming.github.io/2016/11/21/promise-practice/
本文由用戶 cart 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!