在promise then mehod中返回Promise对象时的执行顺序[重复]

2023-12-12

代码是:

Promise.resolve().then(() => {
    console.log(0);
    return Promise.resolve(4);
}).then((res) => {
    console.log(res)
})

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.

Why log 4 是在之后log 3?退货时发生了什么特别的事情promise object in .then method?


JavaScript 运行一个事件循环。

这是我的猜测。

Promise.resolve()创建一个将在下一次迭代中解决的承诺。每个 then 块将在前一个块完成后的下一次迭代中执行。所以这是执行顺序:

迭代 1:创建 2 个 Promise(将其命名为 A 和 B),这将在迭代 2 中解决

迭代 2:Promise A 解决。 Promise B 解决了

迭代 3:thenPromise A 块执行,打印 0 并创建一个新的 Promise(将其命名为 C),该新 Promise 将在迭代 4 中得到解决。thenPromise B 的块执行,打印 1。

迭代 4:第二次thenPromise B 的块执行,打印 2。Promise C 解析。 (由于 Promise C 晚于 Promise B 添加到事件循环中,因此 Promise B 在 Promise C 之前解析)

迭代 5:第三次thenPromise B 块执行,打印 3。thenPromise C 块执行,打印 4。

第 6 次迭代:第四次thenPromise B 块执行,打印 5。

第 7 次迭代:第五次thenPromise B 块执行,打印 6。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在promise then mehod中返回Promise对象时的执行顺序[重复] 的相关文章

随机推荐

  • Symfony 3 中的包罗万象的路线

    我在 Symfony2 中有一个包罗万象的后备路线 但我无法在 Symfony3 中使用 我尝试了这种精确的语法 我的 Symfony2 路线的逐字副本 但没有成功 fallback path req defaults controller
  • 如何获取youtube频道中最新上传视频的id

    在 YouTube 上 我如何获取我订阅的频道的最新上传视频的 ID 网址如 v 用于嵌入我在我的服务器端使用 php 截至2015年4月20日 上述答案似乎不再有效 以下是使用 YouTube 频道 ID 的示例 可以在频道页面的源代码中
  • KivyMD,在android中看不到图标,但在linux上可以工作

    我刚刚使用 buildozer 创建了 apk 文件 但是正如我在主题中所说 在设备上看不到任何图标 在 Linux 中一切正常且看起来很好 但在设备中 所有图标都是空白的 这是我的 buildozer init 要求 我的 ndk sdk
  • 如何更改 scss mixin 中的全局变量

    主题变量 scss Declare a global variable and set it to red color fg primary text red below mixin is used in styles scss to pa
  • 在 Laravel 5.8 中提交后使用 @error 指令从多个输入字段中定位前一个输入字段

    新的 error指令是Laravel 5 8 13 中引入 因此 不要这样做 old if errors gt has email span errors gt first email span endif 你现在可以这样做 new err
  • 如何在我的项目中使用 Chrome 调试 Angular *ngIf 结构指令?

    我想将 Angular 源代码 源映射附加到我生成的 Angular CLI 项目中 以便我可以调试如下指令 ngIf在 Chrome 中 是否可以以某种方式将调试器附加到ng if ts使用一些 angular json 配置 源映射 或
  • 使用 fsolve 的方程组

    我尝试使用以下方法找到方程组的解scipy optimize fsolve在Python 2 7中 目标是计算化学系统的平衡浓度 由于问题的性质 一些常数非常小 现在对于某些组合我确实得到了正确的解决方案 对于某些参数我找不到解决方案 要么
  • 如何防止Python IDLE在运行新脚本时重新启动

    我使用Python 3 6 1 IDLE 我希望能够运行一系列脚本 同时维护本地环境 变量等 就像我已将所有命令逐行输入到 shell 中一样 但是 每当我执行脚本时 环境都会重新启动 并且我会丢失之前执行的所有变量 我可以采取什么措施来防
  • Pandas 数据框中值的矢量化查找

    我有两个 pandas 数据框 其中一个称为orders另一个叫daily prices daily prices如下 AAPL GOOG IBM XOM 2011 01 10 339 44 614 21 142 78 71 57 2011
  • java.util.Scanner 跳过输入请求[重复]

    这个问题在这里已经有答案了 我正在尝试使用接收输入java util Scanner Scanner scanner new Scanner System in int bla scanner nextInt String blubb sc
  • 是否有使用 ExoPlayer 实现 DASH 的非 YouTube 示例?

    您好 我正在寻找配置示例ExoPlayer for DASH 但我发现的例子使用 Youtube 视频 有没有 YouTube 上没有的视频示例 能DASH可以针对互联网上的任何视频进行配置吗 是的 ExoPlayer 可以通过 HTTP
  • 如何将Yii2的ActiveForm复选框设置为选中状态?

    我正在为 Yii2 ActiveForm 复选框控件的 选中 状态寻找一个简单的解决方案 但我找不到如何设置它的解决方案 我在文档中找不到任何示例 我尝试过操纵渲染代码 但看来我需要修改 ActiveForm 本身 如何让复选框默认选中 好
  • 如何停止oracle撤消进程?

    我想知道如何停止oracle的撤消过程 我试图删除一个大表的数百万行 在过程中我终止了会话 但它开始撤消删除 并且在大约两个小时内数据库变得非常慢 我不想继续撤消过程 有什么办法可以阻止它吗 您无法停止回滚事务的过程 因为这样做会使数据库处
  • 当微调器遮盖锚元素时,如何使用 Selenium 和 Python 单击锚元素?

    我是硒的新手 我已经尝试单击锚元素有一段时间了 我已经尝试过 css selector lint text xpath absolute xpath 但我仍然无法单击它 而是收到此错误消息 selenium common exception
  • Dropbox API 请求令牌不适用于 Python 3?

    我正在使用官方 Dropbox API 维护一个 Python 应用程序 为了要求用户让我的应用程序使用他们的 Dropbox 帐户 我使用了一个使用 DropboxSession 类的小脚本 这显然与我们可以在这篇博文 Include t
  • git merge 覆盖内容

    这是我的情况 我有两个功能分支 A 和 B 我想合并这两个分支 我做了以下事情 创建一个从 A 分支出来的新分支 C 签出新分支C run git merge B从命令行 我希望这两个分支合并 如果对相同文件的更改存在冲突 则该命令应引发合
  • Mongoose删除文档中的数组元素并保存

    我的模型文档中有一个数组 我想根据我提供的密钥删除该数组中的元素 然后更新 MongoDB 这可能吗 这是我的尝试 var mongoose require mongoose Schema mongoose Schema var favor
  • 如何确保链接的默认操作始终处于禁用状态?

    我正在开发一个项目 其中使用大量 ajax 调用来使站点交互更加优雅 我一直在使用的过程是获得脚本的链接 该脚本执行作为链接标记中的 href 存储的适当操作 然后 我使用 jquery 定位该元素并禁用默认操作并执行 ajax 调用 问题
  • Eclipse 中 Scanf 在 printf 之前执行

    我有以下简单的C语言代码 include
  • 在promise then mehod中返回Promise对象时的执行顺序[重复]

    这个问题在这里已经有答案了 代码是 Promise resolve then gt console log 0 return Promise resolve 4 then res gt console log res Promise res