如何正确认识 ,Promise?

Promise 解析

为啥要使用它?

  1. 地域回调问题,以前的 前端处理异步请求,往往都是多层嵌套实现,数据请求。导致很多问题出现。Promise 的出现基本解决(加上async、await 就更完美了)。
  2. 更好的error 处理;可以集中的在catch()处理 错误。
  3. Promise 有统一的异步处理操作,可以异步达到类似同步的效果。
  4. 并发控制
    • [ all] 可以并行处理多个异步
    • [rece] 等待多个 Promise 中的任何一个完成(或失败),然后根据第一个完成的 Promise 进行操作。这可以用于超时处理或竞争条件。
      8.提高代码的可读性 和可维护性then()、catch(),很好的分离的正常 和异常操作。

核心原理

  1. 状态不可逆:Promise 对象代表一个异步操作,有三种状态:pending(等待态)、fulfilled(完成态)、rejected(失败态)。从 pending 到 fulfilled 或从 pending 到 rejected,状态一旦改变就不能再变-单向不可逆
  2. Executor 函数:Promise 的执行器(Executor)函数在 Promise
    构造函数执行时立即调用,它接受两个参数:resolve 和 reject。这两个参数都是函数,由 JavaScript引擎提供,不需要自己实现。执行器中通过调用 resolve 和 reject 来改变 Promise 的状态。
  3. 异步与微任务(Microtask):Promise 的回调通过任务队列实现异步执行。当调用 resolve 或 reject时,相应的处理函数(.then 或 .catch 中注册的回调)不会立即执行,而是放入一个任务队列中。只有当 JavaScript
  4. 链式调用:每次调用 .then 或 .catch 都会返回一个新的
    Promise,从而实现链式调用。通过这种方式,可以顺序执行多个异步操作,并在每一步中根据前一个操作的结果进行相应处理。
  5. 与 async/await 的整合:Promise 是 async/await 语法的基础,这使得异步代码可以像同步代码那样书写和理解,进一步提高了开发效率和代码质量。

简易版Promise

class SimplePromise {
  constructor(executor) {
    // 初始状态
    this.state = 'pending';
    this.value = undefined;
    this.reason = undefined;

    // 成功状态
    const resolve = (value) => {
      if (this.state === 'pending') {
        this.state = 'fulfilled';
        this.value = value;
      }
    };

    // 失败状态
    const reject = (reason) => {
      if (this.state === 'pending') {
        this.state = 'rejected';
        this.reason = reason;
      }
    };

    try {
      // 立即执行 executor
      executor(resolve, reject);
    } catch (err) {
      reject(err);
    }
  }

  then(onFulfilled, onRejected) {
    // 成功态调用 onFulfilled,传入成功的值
    if (this.state === 'fulfilled') {
      onFulfilled(this.value);
    }
    // 失败态调用 onRejected,传入失败的原因
    if (this.state === 'rejected') {
      onRejected(this.reason);
    }
  }
}

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值