其实你不知道 Promise.then

前言

你真的完全知道 Promise 的执行顺序吗,如果你只通过 [Promise A+ 规范]了解 promise ,你一定不能完全理解 Promise,不信的话你来看看下面这道题

 Promise.resolve().then(() => {console.log(0);return Promise.resolve(); // 如果注释这一行,结果又会是什么呢}).then(() => {console.log(4);});Promise.resolve().then(() => {console.log(1);}).then(() => {console.log(2);}).then(() => {console.log(3);}).then(() => {console.log(5);}).then(() => {console.log(6);});// 0 1 2 3 4 5 6 

如果你不能清晰的说出这两种情况的过程,这篇文章一定对你有帮助。

在阅读本文之前,希望你了解:

  • Promise 基本语法
  • 事件循环模型
  • 微任务

Promise.prototype.then

then 方法是一个 异步的 微任务,解析到这行代码的时候,会把 then 之后的 Promise 链条放到 微任务队列

⭐️then 的返回值
Promise.resolve().then(() => {}); // fulfilled 

then 可以链式调用的原因是因为 then 方法可以返回一个 Promise 实例,注意是 新的实例,与 Promise 链条传递的 之前的 Promise 实例 并无多大关系,而且这个新的实例 状态 一定不是 pending,知道这些内容就足够了

⭐️控制 then 返回值

这里的内容才是重点then 处理返回值有两种情况:

  • return 值(等同于 return undefined) / 显示地 returnpromise 的值,
  • 显示 return 具有 resolvepromise 的值

如果是 returnresolve 的值(排除 reject 情况),Promise 链不会传递下去,所以这里不讨论这种情况

then 处理这两种情况决然不同,这里的观点你基本不会在任何书上看到,全部来自于 v8 引擎 内部实现

1.处理 returnpromise 的值

Promise.resolve().then(() => {}); 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值