首頁 >web前端 >前端問答 >es6中promise有什麼用

es6中promise有什麼用

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB原創
2022-03-30 16:23:122349瀏覽

在es6中,promise用於建立promise物件並進行非同步操作,語法為「const promise = new Promise((resolve,reject)=>{...})」;它持有非同步操作的狀態,用來表示非同步操作的不同結果。

es6中promise有什麼用

本教學操作環境:windows10系統、ECMAScript 6.0版、Dell G3電腦。

es6中promise有什麼用

Promise是ES6中提供的一個非同步程式設計的解決方案,Promise本身就是一個建構子

typeof Promise  //  function

一般情況下我們在開發中會使用new Promise() 呼叫建構函數,建立一個新的Promise物件

#建立Promise 物件進行非同步操作

Promise 也是建構函數,需要使用new關鍵字來建立實例,建立時接受一個函數,且該函數有兩個函數類型的參數:

  • #resolve

  • reject

所以創建Promise 的操作就是:

const promise = new Promise((resolve,reject)=>{...})

resolve 和reject 兩個函數參數決定了當前Promise 的狀態改變以及非同步操作的結果如何處理,他們都可以將非同步操作的結果傳遞出去。

1、物件的狀態不受外界影響。

Promise物件是一個非同步操作,有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。

只有非同步操作的結果,可以決定Promise是哪一種狀態,任何其他操作都無法改變這個狀態

2、一旦Promise狀態改變,就不會再有變化,任何時候都可以得到這個結果。

Promise物件的狀態改變,只有兩種可能:從pending變成fulfilled 或 從pending變成rejected。只要這兩種情況發生,狀態就不會再變了,會一直維持這個結果,這時就稱為 resolved(已定型)。如果改變已經發生了,你再對Promise物件加入回呼函數,也會立即得到這個結果。這與事件(Event)不同,事件的特點是,如果你錯過了它,再去監聽,是得不到結果的

使用Promise的好處,就是在處理非同步程式時,將非同步操作隊列化,依照期望的順序執行,傳回符合預期的結果,這樣即使是多重非同步操作,也可以方便的使用Promise進行鍊式呼叫

3、Promise也有一些缺點。

首先,無法取消Promise,一旦新建它就會立即執行,無法中途取消。其次,如果不設定回呼函數,Promise內部拋出的錯誤,不會反應到外部。第三,當處於pending狀態時,無法得知目前進展到哪一個階段(剛開始還是即將完成)

所謂Promise,簡單說就是一個容器,裡面保存著某個未來才會結束的事件(通常是一個非同步操作)的結果。

ES6 規定,Promise物件是一個建構函數,用來產生Promise實例。

下面程式碼創造了一個Promise實例。

const promise = new Promise(function(resolve, reject) {
  // ... some code
  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

Promise建構子接受一個函數作為參數,該函數的兩個參數分別是resolve和reject。它們是兩個函數,由 JavaScript 引擎提供,不用自己部署。

resolve函數的作用是,將Promise物件的狀態從「未完成」變為「成功」(即從pending 變為resolved),在非同步操作成功時調用,並將非同步操作的結果,作為參數傳遞出去;reject函數的作用是,將Promise物件的狀態從「未完成」變為「失敗」(即從pending 變為rejected),在非同步操作失敗時調用,並將非同步操作報出的錯誤,作為參數傳遞出去。

Promise實例產生以後,可以用then方法分別指定resolved狀態和rejected狀態的回呼函數。

promise.then(function(value) {
  // success
}, function(error) {
  // failure
});

then方法可以接受兩個回呼函數作為參數。第一個回呼函數是Promise物件的狀態變成resolved時調用,第二個回呼函數是Promise物件的狀態變成rejected時調用。其中,第二個函數是可選的,不一定要提供。這兩個函數都接受Promise物件傳出的值作為參數。

【相關推薦:javascript影片教學web前端

以上是es6中promise有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn