Promise的含義
Promise的含義
所謂Promise,就是一個物件,用來傳遞非同步操作的訊息。
Promise物件有以下兩個特點:
- 物件的狀態不受外界影響。Promise物件代表一個非同步操作,有三種狀態:Pending(進行中)、Resolved(已完成,又稱Fulfilled)和Rejected(已失敗)。只有非同步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。
- 一旦狀態改變,就不會再變,任何時候都可以得到這個結果。Promise物件的狀態改變,只有兩種可能:從Pending變為Resolved和從Pending變為Rejected。只要這兩種情況發生,狀態就凝固了,不會再變了,會一直保持這個結果。就算改變已經發生了,你再對Promise物件新增回撥函式,也會立即得到這個結果。這與事件(Event)完全不同,事件的特點是,如果你錯過了它,再去監聽,是得不到結果的。
有了Promise物件,就可以將非同步操作以同步操作的流程表達出來,避免了層層巢狀的回撥函式。此外,Promise物件提供統一的介面,使得控制非同步操作更加容易。
Promise也有一些缺點:
- 首先,無法取消Promise,一旦新建它就會立即執行,無法中途取消。
- 其次,如果不設定回撥函式,Promise內部丟擲的錯誤,不會反應到外部。
- 第三,當處於Pending狀態時,無法得知目前進展到哪一個階段(剛剛開始還是即將完成)。
## 基本用法
Promise物件是一個建構函式,用來生成Promise例項
//建立promise var promise = new Promise(function(resolve, reject) { // 進行一些非同步或耗時操作 if ( /*如果成功 */ ) { resolve("Stuff worked!"); } else { reject(Error("It broke")); } }); //繫結處理程式 promise.then(function(result) { //promise成功的話會執行這裡 document.write(result); // "Stuff worked!" }, function(err) { //promise失敗會執行這裡 document.write(err); // Error: "It broke" });
- resolve函式的作用是,將Promise物件的狀態從“未完成”變為“成功”(即從Pending變為Resolved),在非同步操作成功時呼叫,並將非同步操作的結果,作為引數傳遞出去;
- reject函式的作用是,將Promise物件的狀態從“未完成”變為“失敗”(即從Pending變為Rejected),在非同步操作失敗時呼叫,並將非同步操作報出的錯誤,作為引數傳遞出去。
相關文章
- Promise含義及基本用法Promise
- 閉包的含義
- 回表的含義
- CAP 定理的含義
- bootstrap含義boot
- instanceof 含義
- Makefile中:=, =, ?=和+=的含義
- Java中static的含義Java
- url中#(hash)的含義
- Spring中bean的含義SpringBean
- SMART原則的定義和含義
- samtools各種flag的含義
- SVN中clean up的含義
- C++中&和*的含義C++
- 雲端計算的含義
- OGG中add trandata的含義
- 時區 CST 含義
- LIST INCARNATION OF DATABASE含義Database
- Linux版本號含義Linux
- oracle buffer busy waits等待的含義OracleAI
- CDN含義與DNS的聯絡DNS
- -RGB畫素值分解的含義-
- Linux shell中2>&1的含義Linux
- Linux各種變數的含義Linux變數
- Web含義是什麼Web
- EXPLAIN結果含義(轉)AI
- List Incarnation 語法含義
- 260/280、260/230 含義
- idea之【Before launch】選項的含義Idea
- visual studio原生支援C++的含義C++
- 安全設計的含義是什麼?
- cache操作:clean、invalidate與flush的含義
- etcd套路(八)SIGTERM和SIGINT的含義
- uml圖六種箭頭的含義
- php引數3個點的含義PHP
- 解累積流圖的真正含義
- MAN備份FORMAT格式中%的含義ORM
- 「系統架構」CAP定理的含義架構
- IE 不支援 Promise 解決辦法 (或者 promise 未定義)的解決方法Promise