如何在Promise之前调用此setTimeout?

编程入门 行业动态 更新时间:2024-10-07 04:25:32

<a href=https://www.elefans.com/category/jswz/34/1771448.html style=如何在Promise之前调用此setTimeout?"/>

如何在Promise之前调用此setTimeout?

因此,我一直在研究事件循环以及过去一天的微型/宏观任务队列。而且我已经看到许多人对以下代码有直接的矛盾:

setTimeout(() => console.log("A"), 0);

const futureData = fetch('someUrl') // assume this takes 300ms
futureData.then(x => console.log("B"))

console.log("C")

// output -> C, A, B
// what multiple JS instructors says the output will be -> C, B, A

我得到的实际输出写在上面。但是,在我学习的过程中,讲师认为futureData是一个承诺,因此将其推送到微任务队列中,并且由于将其推送到微任务队列中,因此它将在执行任何操作之前首先执行宏任务,例如setTimeout。

但是运行它之后,这实际上是错误的吗?我在这里缺少什么吗?为什么合格的讲师会这么说,我几乎可以肯定,我缺少了至关重要的信息。

[我的想法是,只有已解决的Promise将被推送到微任务队列,而所有待处理的Promise将不得不等待,直到将来的事件循环为止。

我想念的是什么?

回答如下:

我认为只有在WebApis或其他线程处理了异步部分并且只有回调被推入队列之后,才能将异步任务推送到微/宏任务,这些回调将在主线程本身上运行。

由于fetch300ms附近,所以当堆栈为空时,在MicroTask队列中还没有promise回调,但是在宏中存在SetTimeout一个。

更多推荐

如何在Promise之前调用此setTimeout?

本文发布于:2024-05-07 07:28:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1755143.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何在   Promise   setTimeout

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!