Promise两个链式的执行顺序

5. Promise

  • Promise是解决异步编程的方案,也是一个构造函数,自身有reject、resolve这几个方法,原型上有then、catch等方法,new Promise(实例化Promise)结合原型链上的then、catch方法可以获取异步操作的信息

    • then() ----当Promise中的状态从pending变为fulfilled的时候,then()就能捕获到resolve和reject的回调

在这里插入图片描述

  • catch() ----是用来捕获异常的,也就是和then方法中接受的第二参数rejected的回调是一样的

在这里插入图片描述

  • Promise.then链式结构

  • 如果有多个链式结构那么执行的顺序又是怎么样的呢?

     // Promise 是异步函数的解决方案,
      let p = new Promise((resolve, reject) => {
    
        setTimeout(() => resolve(1), 2000);
    
      })
      // 链式一
      p.then((result) => {
        console.log(1);
      }).then((result) => {
        console.log(2);
      }).then((result) => {
        console.log(3);
      })
      // 链式二
      p.then((result) => {
        console.log(4);
      }).then((result) => {
        console.log(5);
      }).then((result) => {
        console.log(6);
      })
      // 打印的结果是1,4,2,5,3,6
    
    • 因为Promise.then()里面的回调函数是异步任务(微任务),代码在执行的过程中会先将异步任务放到任务队列中
    • 这个时候任务队列就有任务一(链式一p.then()),任务二(链式二p.then())
    • 同步代码执行完毕之后,会去任务队列中获取异步任务,这个时候先获取任务一的回调函数执行,返回一个Promise对象,Promise.then()中的回调函数又是微任务,这个时候会将微任务放到任务队列中,称为任务三
    • 这个时候任务队列只有任务二(链式二p.then()),任务三(链式一p.then())
    • 异步任务一执行完毕之后,调用栈会去任务队列中获取任务二的回调函数执行,返回的又是一个Promise对象,Promise.then()中的回调函数又是微任务,这个时候会将微任务放到任务队列中,称为任务四
    • 这个时候任务队列只有任务三(链式一p.then()),任务四(链式二p.then())
    • 这样循环下去就形成了两个Promise链式一上一下执行的现象
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 中,Promise执行顺序可以分为以下几个步骤: 1. 创建 Promise 对象:使用 `new Promise()` 构造函数创建一个 Promise 对象,并传入一个执行器函数作为参数。 2. 执行器函数:执行器函数会立即执行,并接收两个参数,分别是 `resolve` 和 `reject`。在执行器函数中,你可以编写异步操作的代码逻辑。 3. 异步操作:在执行器函数中,你可以编写异步操作的代码,如异步请求、文件读取等。当异步操作完成时,可以调用 `resolve` 方法将 Promise 置为成功状态,或调用 `reject` 方法将 Promise 置为失败状态。 4. 状态改变:当调用 `resolve` 或 `reject` 方法后,Promise 的状态将发生改变。如果调用了 `resolve`,Promise 的状态将变为成功(fulfilled);如果调用了 `reject`,Promise 的状态将变为失败(rejected)。 5. 注册回调函数:可以使用 `then()` 方法来注册成功状态的回调函数,或使用 `catch()` 方法来注册失败状态的回调函数。这些回调函数将在 Promise 的状态发生改变后被调用。 6. 链式调用:通过链式调用 `then()` 方法,可以将多个回调函数串联起来,并且每个回调函数可以返回一个新的 Promise 对象,实现链式异步操作。 需要注意的是,Promise 是非阻塞的,即在执行异步操作时,JavaScript 主线程可以继续执行其他任务,而不会等待 Promise 的结果。当 Promise 的状态改变后,相关的回调函数才会被调用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值