Promise 简述

Promise

new Promise((resolve, reject) => {
  resolve() // 成功
  // reject() // 失败
})
Promise有三种状态
  • pending [待定] 初始状态
  • fulfilled[实现] 操作成功
  • rejected[被否决] 操作失败

resolvePromise状态从pending变成fulfilled
rejectedPromise状态从pending变成rejected
一旦状态改变, 就不会再修改

Promise.then(success => {}, err => {}) 参数为两个回调函数, 第一个成功时触发, 第二个失败时触发
Promise.finally(() => {}) 该方法回调内没有参数, 无论resovel还是rejected都会执行, 因此finally方法里面的操作,应该是与状态无关的,不依赖于 Promise 的执行结果。

Promise链式调用

Promise.then()返回一个Promise, 所以可以使用.then().then()...的链式调用, 但是当第一个then有异步操作, 就无法保证和之后的then中内容的执行顺序,例如:

function delay (t) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(t, 'ms后打印')
      resolve()
    }, t);
  })
}
delay(100)
.then(() => {
  delay(2000)
}).then(() => {
  delay(300)
})
// 结果
// 100 ms后打印
// 300 ms后打印
// 2000 ms后打印

.then()内的回调函数返回Promise时, 会等待Promise结束后再执行下一个then, 例如:

function delay (t) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(t, 'ms后打印')
      resolve()
    }, t);
  })
}
delay(100).then(() => {
  return delay(2000)
}).then(() => {
  delay(300)
})
// 结果
// 100 ms后打印
// 2000 ms后打印
// 300 ms后打印

Promise静态方法

  • Promise.all([]) 参数: Promise数组, 数组内的Promise全部完成该Promise完成
  • Promise.race([]) 同上, 有一个完成就算完成
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。