從多個方面詳細闡述Promise的三種狀態

一、Promise的三種狀態是什麼

Promise有三種狀態:Pending,Fulfilled和Rejected。當一個Promise實例被創建時,它的初始狀態為Pending。Promise實例的狀態會在異步操作完成後從Pending狀態轉變為Fulfilled或Rejected狀態。Promise狀態的轉變是不可逆的,一旦狀態被轉變,它就不會再次改變。

二、Promise的三種用法

Promise的三種用法:Promise.resolve(), Promise.reject()和Promise.all()。

Promise.resolve()可以將一個普通的變量或者是另一個Promise實例轉變為一個Fulfilled狀態的Promise實例;Promise.reject()可以將一個異常或者錯誤信息轉變為一個Rejected狀態的Promise實例;Promise.all()可以將多個Promise實例一起處理,只有等到所有的Promise實例都成功執行後才會進入到Fulfilled狀態。

三、Promise的所有形式

Promise有多種形式:ES6原生Promise,jQuery Ajax返回的Promise實例,以及一些基於Promise的庫等等。

下面是基於ES6原生Promise的一些具體形式的代碼示例:

// Promise實例的創建
let promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    let randomNum = Math.random();
    if (randomNum > 0.5) {
      resolve(randomNum);
    } else {
      reject(randomNum);
    }
  }, 1000);
});

// Promise實例的基本使用
promise.then((value) => {
  console.log("Fulfilled: " + value);
}).catch((reason) => {
  console.log("Rejected: " + reason);
});

// Promise實例的鏈式調用
promise.then((value) => {
  console.log("Fulfilled: " + value);
  return value * 2;
}).then((value) => {
  console.log("2 times of the fulfilled value: " + value);
}).catch((reason) => {
  console.log("Rejected: " + reason);
});

// Promise實例的異步請求
let promisedFetch = (url) => {
  return new Promise((resolve, reject) => {
    fetch(url).then((response) => {
      if (response.ok) {
        resolve(response.json());
      } else {
        reject(response.status);
      }
    }).catch((error) => {
      reject(error);
    });
  });
};

四、Promises

Promises是指所有符合Promise/A+規範的Promise實例,它們都具有相同的行為和屬性。Promise/A+規範定義了Promise實例的幾種行為,包括Promise實例的狀態,狀態的轉變方式,以及如何使用Promise實例。

五、Promise簡單實現

以下是一個簡單的Promise實現:

class Promise {
  constructor(executor) {
    this.status = "pending";
    this.value = null;
    this.reason = null;
    let resolve = (value) => {
      if (this.status === "pending") {
        this.status = "fulfilled";
        this.value = value;
      }
    };
    let reject = (reason) => {
      if (this.status === "pending") {
        this.status = "rejected";
        this.reason = reason;
      }
    };
    try {
      executor(resolve, reject);
    } catch (error) {
      reject(error);
    }
  }
  then(onFulfilled, onRejected) {
    if (this.status === "fulfilled") {
      onFulfilled(this.value);
    } else if (this.status === "rejected") {
      onRejected(this.reason);
    }
  }
  catch(onRejected) {
    if (this.status === "rejected") {
      onRejected(this.reason);
    }
  }
}

六、Promise有幾種狀態

Promise有三種狀態:Pending,Fulfilled和Rejected。初始狀態是Pending,表示Promise實例的異步操作還沒有完成。當異步操作成功完成時,狀態轉變為Fulfilled;當異步操作失敗時,狀態轉變為Rejected。

七、Promise三種狀態

Promise的三種狀態分別是Pending,Fulfilled和Rejected。

八、Promise的狀態有哪些

Promise有三種狀態:Pending,Fulfilled和Rejected。

九、Promise三種狀態轉換

Promise的狀態是由異步操作的結果決定的。當異步操作成功完成時,狀態轉變為Fulfilled;當異步操作失敗時,狀態轉變為Rejected。

十、Promise三種狀態怎麼修改

Promise的狀態是不可逆的,一旦狀態被轉變,它就不會再次改變。Promise的狀態只能在異步操作完成後由Pending狀態轉變為Fulfilled或Rejected狀態,而狀態的轉變是由Promise實例的resolve或reject方法決定的。

以下是一個狀態轉變的示例:

let promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    let randomNum = Math.random();
    if (randomNum > 0.5) {
      resolve(randomNum);
    } else {
      reject(randomNum);
    }
  }, 1000);
});
promise.then((value) => {
  console.log("Fulfilled: " + value);
}).catch((reason) => {
  console.log("Rejected: " + reason);
});

在這個示例中,當異步操作執行成功後,Promise實例的狀態會由Pending狀態轉變為Fulfilled狀態;當異步操作失敗後,Promise實例的狀態會由Pending狀態轉變為Rejected狀態。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/280777.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-21 13:04
下一篇 2024-12-21 13:04

相關推薦

發表回復

登錄後才能評論