溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6 promise有哪些狀態

發布時間:2022-05-20 16:01:33 來源:億速云 閱讀:315 作者:iii 欄目:web開發

ES6 Promise有哪些狀態

在JavaScript中,Promise是用于處理異步操作的對象。它代表了一個異步操作的最終完成(或失?。┘捌浣Y果值。Promise對象有三種狀態,分別是pending(進行中)、fulfilled(已成功)和rejected(已失?。?。理解這些狀態對于正確使用Promise至關重要。

1. Pending(進行中)

PendingPromise的初始狀態。當一個Promise被創建時,它處于pending狀態。這意味著異步操作尚未完成,Promise既沒有被fulfilled,也沒有被rejected。

const promise = new Promise((resolve, reject) => {
  // 異步操作
  setTimeout(() => {
    resolve('操作成功');
  }, 1000);
});

console.log(promise); // Promise { <pending> }

在上面的例子中,promise在創建后立即處于pending狀態,直到setTimeout回調函數執行并調用resolve。

2. Fulfilled(已成功)

Promise中的異步操作成功完成時,Promise會從pending狀態轉變為fulfilled狀態。此時,Promise的結果值會被傳遞給then方法的回調函數。

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('操作成功');
  }, 1000);
});

promise.then((result) => {
  console.log(result); // 操作成功
});

在這個例子中,promise在1秒后變為fulfilled狀態,并且then方法的回調函數被調用,輸出操作成功。

3. Rejected(已失?。?/h2>

如果Promise中的異步操作失敗或出現錯誤,Promise會從pending狀態轉變為rejected狀態。此時,錯誤信息會被傳遞給catch方法的回調函數。

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject(new Error('操作失敗'));
  }, 1000);
});

promise.catch((error) => {
  console.log(error.message); // 操作失敗
});

在這個例子中,promise在1秒后變為rejected狀態,并且catch方法的回調函數被調用,輸出操作失敗。

4. 狀態不可逆

Promise的狀態一旦從pending轉變為fulfilledrejected,就不可再改變。這意味著一個Promise只能被resolvereject一次,后續的resolvereject調用將被忽略。

const promise = new Promise((resolve, reject) => {
  resolve('第一次resolve');
  reject(new Error('第一次reject')); // 被忽略
  resolve('第二次resolve'); // 被忽略
});

promise.then((result) => {
  console.log(result); // 第一次resolve
}).catch((error) => {
  console.log(error.message); // 不會執行
});

在這個例子中,盡管reject和第二次resolve被調用,但它們都被忽略,只有第一次resolve生效。

5. 總結

Promise的三種狀態pending、fulfilledrejected是理解和使用Promise的基礎。pending表示異步操作尚未完成,fulfilled表示操作成功完成,rejected表示操作失敗。Promise的狀態一旦改變,就不可逆轉。掌握這些狀態及其轉換規則,有助于更好地處理異步操作和錯誤處理。

通過合理使用Promise,可以有效地管理復雜的異步代碼,避免回調地獄(Callback Hell),并提高代碼的可讀性和可維護性。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女