Skip to content
快看这页儿写了啥...

简述 Promise,有几种状态、特点是什么、解决了什么问题、优缺点是什么?

题干

  • Promise

题解

Promise 对象是异步编程的一种解决方案,最早由社区提出。Promise 是用于处理异步操作的对象,它解决了传统的回调函数方式(回调地狱)所带来的代码可读性和维护性的问题。

Promise 有三种状态:

  • pending(进行中):初始状态,表示异步操作还未完成。
  • resolved(已成功):表示异步操作成功完成。
  • rejected(已失败):表示异步操作失败。

Promise 特点:

  • 可链式调用Promise 提供了 then 方法,可以通过链式调用 then 方法来处理异步操作的成功和失败。这种链式调用的方式使得代码更加清晰、可读性更高。
  • 错误处理Promise 提供了 catch 方法,用于捕获链式调用中发生的错误。通过 catch 方法,可以集中处理异步操作的错误,避免回调函数中的错误处理逻辑分散在各处。
  • 状态不可逆:一旦 Promise 的状态变为 resolvedrejected,就无法再次改变。这种特性保证了 Promise 的状态在异步操作完成后是确定的,不会出现不一致的情况。这也是 Promise 名字的由来 ── 承诺。
  • 解决了回调地狱问题:通过 Promise 的链式调用,可以避免传统回调函数方式中的嵌套问题,使代码更加结构化、可读性更高。

Promise 优点:

  • Promise 通过链式调用和错误处理机制,提供了更清晰、结构化的异步编程方式,使代码可读性更高。链式调用解决了传统回调函数方式中的回调地狱问题,使代码更加可读、易于维护。

Promise 缺点:

  • 无法取消 Promise,一旦新建它就会立即执行,无法中途取消。
  • 如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
  • 当处于 pending 状态时,无法得知目前进行到哪一个阶段了(开始或完成)

注:状态的改变是通过 resolve()reject() 函数来实现的,可以在异步操作结束后调用这两个函数改变 Promise 实例的状态,它的原型上定义了一个 then 方法,使用这个 then 方法可以为两个状态的改变注册回调函数。这个回调函数属于微任务,会在本轮事件循环的末尾执行。另外,在构造 Promise 时,构造函数内部的代码是立即执行的。

相关

Promise then 第二个参数和catch的区别是什么

Promise.all 和 Promise.race 的区别和使用场景

Promise 和 setTimeout 的区别

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐