Promise 简述与用法

190 阅读2分钟

什么是 Promise

  • Promise 是异步编程的一种解决方案
  • Promise 是一个对象,从它可以获取异步操作的消息
  • Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理
  • Promise 对象用于表示一个异步操作的最终完成(或失败)及其结果值

Promise 的状态介绍

状态:

  • pending(进行中):初始状态,既没有被兑现,也没有被拒绝。

  • fulfilled(已成功):意味着操作成功完成。

  • rejected(已失败):意味着操作失败。

特点:

  1. 对象的状态不受外界影响,只有异步操作的结果,可以决定当前是哪一种状态
  2. 一旦状态改变(从pending变为fulfilled和从pending变为rejected),就不会再变,任何时候都可以得到这个结果

流程:

image.png

Promise 的用法介绍

实例方法:

  • then() 返回一个 的 promise 对象

then是实例状态发生改变时对的回调函数,then方法可以接收两个回调函数作为参数,第一个回调函数是promise对象的状态变为resolved调用,第二个回调函数是promise对象的状态变为rejected时调用,其中第二个参数可以省略。

 getJSON("/data.json").then((res)=> {
    console.log(res);
}).then((data)=> {
  // ...
});
  • catch() 返回一个 失败 的 promise 对象

catch是实例状态发生错误时的回调函数。一般来说,使用catch方法代替then()第二个参数

getJSON("/data.json").then((res)=> {
    console.log(res);
}).catch((err)=> {
  console.log(err);
});
  • finally() 返回一个 成功 / 失败 的 promise 对象

finally是实例状态如何,都会执行的操作。

getJSON("/data.json").then((res)=> {})
.catch((err)=> {})
.finally(()=>{})
  • all() 只有所有的 promise 都成功才成功, 只要有一个失败了就直接失败
const p = Promise.all([p1, p2, p3]);
  • race() 第一个完成的 promise 就是最终的结果状态;返回一个新的 promise
const p = Promise.race([p1, p2, p3]);
  • any() 接收一个 promise 对象的集合,当其中的任意一个 promise 成功,就返回那个成功的 promise 的值
const p = Promise.any([p1, p2, p3]);

为什么要用Promise

  1. 指定回调函数的方法更加灵活
  2. 支持链式调用 ,可以解决回调函数问题
  3. new 出来的 Promise 实例对象,代表一个 异步操作