创建Promise对象

// 初始化状态
let promise = new Promise(function (resolve, reject) {
  /**
   * resolve - 是一个函数,将Promise对象的状态改为成功
   * rejecte - 是一个函数,将Promise对象的状态改为失败
   */
  setTimeout(() => {
    resolve("测试成功了!");
  }, 200);
});

// then将promise的状态改变
promise.then(function (value) {
  console.log(value); // 测试成功了!
});

Promise对象原型的方法

  1. then()方法

    主要作用是为Promise对象添加状态改变时回调函数。其第一个参数resolved状态的回调函数。第二个参数是rejected状态时的回调函数。

  2. catch()方法

    此方法返回一个Promise对象,并且处理拒绝的情况。

    let promise = new Promise(function (resolve, reject) {
      setTimeout(() => {
        reject("测试成功了!");
      }, 200);
    });
    
    // then将promise的状态改变
    promise
      .then((value) => {
        console.log("then() :", value);
      })
      .catch((value) => {
        console.log("catch() :", value); // catch() : 测试成功了!
      });
  3. finally()方法

    返回一个Promise对象,在执行then()catch()后,都会执行finally()方法。

    let promise = new Promise(function (resolve, reject) {
      setTimeout(() => {
        reject("测试成功了!");
      }, 200);
    });
    
    // then将promise的状态改变
    promise
      .then((value) => {
        console.log("then() :", value);
      })
      .catch((value) => {
        console.log("catch() :", value); // catch() : 测试成功了!
      })
      .finally(() => {
        console.log("finally"); // finally
      });

对象方法

  1. Promise.resolve(value)

    返回一个成功的对象

  2. Promise.reject(reject)

    返回一个失败的对象

  3. Promise.all()

    将对各Promise对象整合成一个。

    let promise1 = new Promise((resolve, reject) => {
      resolve("promise1");
    });
    let promise2 = new Promise((resolve, reject) => {
      resolve("promise2");
    });
    let promise3 = new Promise((resolve, reject) => {
      resolve("promise3");
    });
    
    let promise = Promise.all([promise1, promise2, promise3]);
    promise.then((value) => {
      console.log(value); // [ 'promise1', 'promise2', 'promise3' ]
    });
  4. Promise.race()

    在整合中的Promise对象中,哪个Promise对象先执行完,函数就返回什么。

    let promise1 = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("one");
      }, 100);
    });
    let promise2 = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("two");
      }, 300);
    });
    
    let promise = Promise.race([promise1, promise2]);
    
    promise.then((value) => {
      console.log(value); // one 因为第一个先执行完
    });

Promise执行的流程

image-20201027091956032