promise是異步編程的一種解決方法,比回調函數和事件更強大更合理。
所謂promise簡單說就是一個容器,里面保存著未來才會結束的事件(通常是一個異步操作的結果),從語法上說promise是一個對象,從它可以獲取異步操作的消息。
promise對象有兩個特點:
1.對象的狀態不受外界影響。promise對象代表一個異步操作,有三種狀態:pending(進行中),resolved(已完成)和reject(已失?。V挥挟惒讲僮鞯慕Y果可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。這也是promise這個名字的由來。表示其他手段無法改變。
2.一旦狀態改變就不會在變,任何時候都可以得到這個結果。promise對象的狀態改變只有兩種可能:從pending變為resolved,從pending變為rejected。只要這兩種狀況發生,狀態就會凝固了,不會在變了,會一直保持這個結果。就算改變已經發生了,即使調用回調函數也還是這個結果。這與事件(Event)完全不同,事件的特點是如果你錯過了,再去監聽它,是得不到結果的。
promise優點
有了promise對象,就可以把異步操作以同步操作的流程表達出來,避免了層層嵌套的回調函數。此外,promise對象提供了統一的接口,使得控制異步操作更簡單。
缺點
1.無法取消promise,一旦創建就立即執行,無法中途取消
2.如果不設置回調函數,promise內部拋出錯誤,不會反映到外部
3.當處于pending狀態時,無法得知目前進展到那個階段(剛剛開始還是即將完成)