JS中的Promise是什么?如何使用?

promiseJavaScript 中處理異步操作的方式,通過三種狀態(tài)(pending、fulfilled、rejected)管理異步結(jié)果。1. 創(chuàng)建 promise 使用 new promise(resolve, reject);2. 用 .then() 處理成功,.catch() 捕獲錯誤;3. 可鏈式調(diào)用實現(xiàn)多個異步操作順序執(zhí)行;4. promise 提供靜態(tài)方法如 promise.all()、promise.any()、promise.race() 來處理多個 promise 的組合與競爭情況。掌握 promise 能提升代碼可讀性并為 async/await 編程打下基礎(chǔ)。

JS中的Promise是什么?如何使用?

Promise 是 JavaScript 中處理異步操作的一種方式,它比傳統(tǒng)的回調(diào)函數(shù)更清晰、更容易管理。簡單來說,Promise 表示一個現(xiàn)在可能還不可用,但未來會返回值的操作結(jié)果。這個結(jié)果可能是成功(fulfilled)也可能是失敗(rejected)。

Promise 的三種狀態(tài)

Promise 有三種基本狀態(tài):

  • pending(進行中):初始狀態(tài),既沒有被兌現(xiàn),也沒有被拒絕。
  • fulfilled(已成功):表示操作成功完成。
  • rejected(已失敗):表示操作失敗。

一旦狀態(tài)改變,就不會再變。也就是說,一個 Promise 要么成功,要么失敗,不會同時發(fā)生。

比如你發(fā)起了一個網(wǎng)絡(luò)請求,剛開始是 pending 狀態(tài),等服務(wù)器返回了數(shù)據(jù),就變成 fulfilled;如果網(wǎng)絡(luò)出問題了,就變成 rejected。

如何創(chuàng)建一個 Promise?

你可以通過 new Promise() 來創(chuàng)建一個新的 Promise 對象構(gòu)造函數(shù)接受一個函數(shù)作為參數(shù),這個函數(shù)有兩個參數(shù):resolve 和 reject,分別用來表示成功和失敗的回調(diào)。

舉個例子:

const myPromise = new Promise((resolve, reject) => {   const success = true;   if (success) {     resolve("操作成功!");   } else {     reject("出錯了!");   } });

上面的例子中,我們模擬了一個操作是否成功的邏輯。如果成功,調(diào)用 resolve(),否則調(diào)用 reject()。

如何使用 Promise?

創(chuàng)建好 Promise 后,我們可以用 .then() 和 .catch() 來處理結(jié)果。

  • .then() 處理成功的情況
  • .catch() 處理失敗的情況

繼續(xù)上面的例子:

myPromise   .then(message => {     console.log(message); // 輸出“操作成功!”   })   .catch(error => {     console.error(error); // 如果失敗,輸出錯誤信息   });

常見做法是鏈式調(diào)用,比如多個異步操作依次執(zhí)行:

fetchData()   .then(data => processData(data))   .then(processedData => saveData(processedData))   .catch(err => console.error(err));

這樣寫的好處是結(jié)構(gòu)清晰,避免了“回調(diào)地獄”。

Promise 常見的幾個方法

除了 .then() 和 .catch(),Promise 還提供了一些靜態(tài)方法來處理多個 Promise。

  • Promise.resolve():快速創(chuàng)建一個成功狀態(tài)的 Promise。
  • Promise.reject():快速創(chuàng)建一個失敗狀態(tài)的 Promise。
  • Promise.all():接收一個 Promise 數(shù)組,全部成功才成功,有一個失敗就立即失敗。
  • Promise.any():接收一個 Promise 數(shù)組,只要有一個成功就成功,全部失敗才失敗。
  • Promise.race():接收一個 Promise 數(shù)組,哪個最快完成就采用哪個的結(jié)果。

例如:

Promise.all([promise1, promise2, promise3])   .then(values => console.log(values))   .catch(error => console.error(error));

這個在并發(fā)請求時特別有用。

基本上就這些。Promise 是現(xiàn)代 JS 異步編程的基礎(chǔ),掌握它對理解 async/await 也有幫助。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊6 分享