js是單執行緒的,Promise解決就是非同步程式設計一種思想,比傳統的回呼函數和事件強大得多。 Promise相當於非同步操作結果的佔位符,他不會去訂閱一個事件,也不會傳遞一個回呼函數給目標函數,而是讓函數傳回一個Promise(相當於訂單號碼)。
Promise:英文承諾意思,Promise物件中保存某個未來才回結束的事件(通常是一個非同步操作)的結果。
Promise有三個狀態:(建議學習:Javascript影片教學)
pendding,rejected,resolved
Promise物件狀態的切換只有兩種可能:
pendding->rejected,pendding->resolved
基礎用法:
new Promise((resolved,rejected)=>{})
Promise物件resolved,rejected函數,在非同步事件狀態pendding->resolved回呼成功時,會呼叫resolved函數;當非同步操作失敗時,回呼叫rejected函數。
Promise的then(resolved,rejected)函數參數有兩個,一個resolved函數,一個rejected函數。
Promise的catch():捕捉promise錯誤函數,和then函數參數中rejected作用一樣,處理錯誤,由於Promise拋出錯誤具有冒泡性質,能夠不斷傳遞,會傳到catch中,所以建議所有錯誤處理放在catch中,then中只處理成功的。
Promise一個大特色就是可以鍊式調用,在then,catch中可以返回Promise物件。
Promise.all([promise1,promise2]):參數是promise物件數組,等到所有promise物件狀態resolved,該物件的狀態會resolved,會立即呼叫then,當有一個promise物件為rejected,該物件的狀態就會邊城rejectd,執行catch。
Promise.race([promise1,promise2]):競速函數,當有一個promise物件狀態變化了,該物件就會採用和相同的狀態,並執行對應函數。
promise的生命週期
每個 Promise都會經歷一個短暫的生命週期,初始為掛起態( pending state),這表示非同步作業尚未結束。一個掛起的 Promise 也被認為是未決的( unsettled )。一旦非同步操作結束, Promise就會被認為是已決的( settled ),並進入兩種可能狀態之一:
1. 已完成(fulfilled ): Promise 的非同步操作已成功結束;
2. 已拒絕(rejected ): Promise 的非同步操作未成功結束,可能是錯誤,或由其他原因導致。
一旦狀態改變,就「凝固」了,會一直維持這個狀態,不會再改變。當狀態發生變化,promise.then綁定的函數就會被呼叫。注意:Promise一旦新建就會「立即執行」,無法取消。這也是它的缺點之一。
更多Javascript相關技術文章,請造訪js教學欄位進行學習!
以上是promise是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!