# 1. 基本用法

  • promise 实例创建
const promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});
  • 实例生成后的调用
promise.then(
  function(value) {
    // success
  },
  function(error) {
    // failure
  }
);
  • 调用时序
new Promise((resolve, reject) => {
  resolve(1);
  console.log(2);
}).then((r) => {
  console.log(r);
});

上面代码中,调用 resolve(1)以后,后面的 console.log(2)还是会执行,并且会首先打印出来。这是因为立即 resolved 的 Promise 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务。

# 2. promise 相关 api

  • Promise.prototype.then() then 方法返回的是一个新的 Promise 实例(注意,不是原来那个 Promise 实例)。因此可以采用链式写法,即 then 方法后面再调用另一个 then 方法。
  • Promise.prototype.catch() Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个 catch 语句捕获。
  • Promise.prototype.finally() finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作
  • Promise.all() Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
  • Promise.allSettled() 只有等到所有这些参数实例都返回结果,不管是 fulfilled 还是 rejected,包装实例才会结束
  • Promise.resolve()
  • Promise.reject() Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为 rejected