JavaScript Promise 物件
一、什麼是Promise
ECMAscript 6 提供了 Promise 物件。Promise 是非同步程式設計的一個解決方案,不同於回撥,裡面儲存著某個未來才會結束的事件(通常是一個非同步操作(定時器,ajax,圖片載入))的結果。所謂Promise,就是一個容器,裝的就是非同步的操作(未來才會產生的事情)。Promise 是一個物件,從它可以獲取非同步操作的訊息。
二、Promise的特點
1.物件的狀態不受外界影響。Promise物件代表一個非同步操作,有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。任何其他操作都無法改變這個狀態。(某些時候用resolved(已完成)來代替fulfiller(已成功)的狀態)
2.一旦狀態改變,就不會再變。Promise物件的狀態改變只有兩種可能:從pending-->resolved和從pending-->rejected。
三、基本寫法
下面用一個小例子向大家展示promise的基本寫法:
可以看到列印出來的是成功。當const a=false時,列印結果為失敗。
Promise建構函式兩個引數分別是resolve和reject。resolve是非同步操作成功時需要執行的 reject是非同步操作失敗時需要執行的。
四、用Promise物件實現的 Ajax 操作
下面寫一個簡單的例子:
可以看出。all是所有非同步操作全部執行完畢,才執行的then。而race則是隻接收最快的非同步資料。
五、promise中的then
Promise例項生成以後就具有then方法了,因為then方法是定義在原型物件Promise.prototype上的。promise.then() 是 promise 最為常用的方法,可以用then方法分別指定resolved狀態和rejected狀態的回撥函式。其中rejected狀態的回撥函式是可選的。 解決ajax1的返回的資料在ajax2裡面使用,每個ajax放到一個Promise物件裡面。p1.then放到p2的Promise物件裡面執行。then 可以一直往下走,可以有多個。而catch是錯誤執行的程式碼,只能有一個,並且放在所有then之後執行。
六、Promise 優缺點
有了 Promise 物件,就可以將非同步操作以同步操作的流程表達出來,避免了層層巢狀的回撥函式。此外,Promise 物件提供統一的介面,使得控制非同步操作更加容易。
Promise 也有一些缺點。首先,無法取消 Promise,一旦新建它就會立即執行,中途不能取消。其次,如果不設定回撥函式,Promise 內部丟擲的錯誤,不會反應到外部。第三,當處於 Pending 狀態時,無法得知目前進展到哪一個階段(剛剛開始還是即將完成)。
總結的可能有點亂不是很完整。有好的意見可以交流噢~
相關文章
- JavaScript Promise物件JavaScriptPromise物件
- 聊一聊Javascript中的Promise物件JavaScriptPromise物件
- Javascript — PromiseJavaScriptPromise
- Promise in JavascriptPromiseJavaScript
- Promise物件概要Promise物件
- JS promise物件JSPromise物件
- Javascript Promise用法JavaScriptPromise
- JavaScript Promise(基礎)JavaScriptPromise
- JavaScript Promise 詳解JavaScriptPromise
- 這次聊聊Promise物件Promise物件
- ES6——Promise 物件Promise物件
- Promise物件,究竟為何物?Promise物件
- Javascript基礎之-PromiseJavaScriptPromise
- JavaScript之淺析PromiseJavaScriptPromise
- [JavaScript] Promise 與 Ajax/AxiosJavaScriptPromiseiOS
- javascript非同步與promiseJavaScript非同步Promise
- javascript 進階之 - PromiseJavaScriptPromise
- [Javascript] Promise question with async awaitJavaScriptPromiseAI
- JavaScript Promise 的使用技巧JavaScriptPromise
- JavaScript 裡的 Promise ChainingJavaScriptPromiseAI
- ES6的Promise物件Promise物件
- Promise 物件學習筆記Promise物件筆記
- Javascript 物件 – 字串物件JavaScript物件字串
- JavaScript 在 Promise.then 方法裡返回新的 PromiseJavaScriptPromise
- Promise原理講解 && 實現一個Promise物件 (遵循Promise/A+規範)Promise物件
- JavaScript 物件JavaScript物件
- JavaScript物件JavaScript物件
- 深入理解Javascript之PromiseJavaScriptPromise
- Salesforce Javascript(一) Promise 淺談SalesforceJavaScriptPromise
- JavaScript Promise由淺入深JavaScriptPromise
- JavaScript Promise查缺補漏JavaScriptPromise
- Javascript 物件 – 陣列物件JavaScript物件陣列
- Javascript 物件 – 數學物件JavaScript物件
- JavaScript高階:JavaScript物件導向,JavaScript內建物件,JavaScript BOM,JavaScript封裝JavaScript物件封裝
- ES6中的Promise物件Promise物件
- ES6語法——Promise物件Promise物件
- JS中的Promise 物件記錄JSPromise物件
- JavaScript Array 物件JavaScript物件