Promise 基本了解和使用

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。
Promise的状态不受外界影响。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
Promise的状态一旦状态改变,就不会再变。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。

Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
Promise.all()方法只适合所有异步操作都成功的情况,如果有一个操作失败,就无法满足要求。

const p = Promise.all([p1, p2, p3]);
只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

  new Promise(function (resolve, reject) {
    resolve('success1')
  }).then(function (res) {
    console.log(11, res)
    return new Promise(function (resolve, reject) {
      resolve('success2')
    })
  }).then(function (res) {
    console.log(22, res)
    return new Promise(function (resolve, reject) {
      // resolve('success3')
      reject('fail') 
      // 下面3 4都不会继续执行,promise的状态一旦确定,不在更改
      // 即使下面再抛出reject,也不会执行,只会以第一个reject为主
    })
  }).then(function (res) {
    console.log(33, res)
    return new Promise(function (resolve, reject) {
      resolve('success4')
    })
  }).then(function (res) {
    console.log(44, res)
  }).catch(function (error) {
    console.log(error)
  })

详细讲解 https://es6.ruanyifeng.com/#docs/promise

posted @ 2023-02-08 02:21  LC蜗牛  阅读(21)  评论(0编辑  收藏  举报