Promise是什么
Promise是異步處理對象以及對其進行各種操作的組件蚓哩。一個Promise對象代表一個目前不可用亭饵,但是在未來的某個時間點可以被解析值妥箕。允許以同步的方式編寫異步代碼抒寂。
Promise出現的原因
在promise之前洪灯,在JS中的異步編程都是采用回調函數和事件的方式隔心,但是這種編程方式在處理復雜的業(yè)務情況下白群,很容易出現回調多層嵌套,使得代碼很難理解和被維護硬霍。
Promise改善了這種情形下的異步編程的解決方案帜慢,它是由社區(qū)提出和實現的。ES6將其寫進了語言標準唯卖,統(tǒng)一了用法粱玲,并且提供了一個原生的對象Promise
Promise的API
從這個簡單的例子可以看出我們需要基本掌握的是
- Promise的構造函數
- resolve()、reject()
- then()
a拜轨、promise的構造函數
執(zhí)行結果如下:
可以看到先輸出了promise
抽减,再輸出了end
。
當通過Promise構造函數實例化一個對象時橄碾,會傳遞一個函數作為參數卵沉,而且這個函數在新建一個Promise后,會立即執(zhí)行堪嫂。
b偎箫、resolve/reject
在Promise中,Promise操作有3中狀態(tài)皆串,但是其只存在于三種狀態(tài)的一種淹办。其關系如下:
注意:這種狀態(tài)的改變只能從未完狀態(tài)到完成態(tài)或失敗態(tài)轉變,不能逆反恶复。完成態(tài)和失敗態(tài)不能相互轉化怜森,而且速挑,狀態(tài)一旦轉化則不能修改。
只有異步操作的結果副硅,才能決定當前狀態(tài)是哪一種狀態(tài)姥宝,任何其他操作無法改變這一狀態(tài)。
通常恐疲,我們在聲明一個Promise對象的實例時腊满,在我們傳入的匿名參數中:
- resolve代表完成態(tài)后的操作
- reject代表失敗態(tài)后的操作
c、then
了解到上面那些之后培己,我們也許會問then
方法的作用是什么呢碳蛋,resolve
和reject
又是從哪里傳遞過來的。
其實省咨,我們在實例化Promise對象時肃弟,調用該對象的實例方法then,其中then的第一個參數對應著完成狀態(tài)的操作零蓉,也就是resolve笤受,第二個參數代表著失敗態(tài)的操作,是reject敌蜂。
總的來說箩兽,Promise通過then
方法來指定處理異步操作結果的方法。