首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中,哪些微任务以承诺的方式排在队列中?

在JavaScript中,哪些微任务以承诺的方式排在队列中?
EN

Stack Overflow用户
提问于 2022-03-29 20:18:30
回答 1查看 201关注 0票数 2

我试图了解什么是微任务排队时,一个承诺是解决与另一个承诺。

例如,哪些微任务是用以下代码排队的?

代码语言:javascript
复制
const p1 = Promise.resolve("A");
const p2 = new Promise(resolve => resolve(p1));
p2.then(() => console.log("THEN"));

我没有办法检查MicrotaskQueue在V8。在“阅读”了ECMA“承诺解析函数”规范之后,这就是我所理解的:

承诺的执行者中的调用resolve(p2)将一个将p1链接到p2的微任务排队。让我们称它为链微任务

执行代码块后,堆栈为空,V8处理微任务队列。队列只包含链接微任务。

链接微任务调用p1p1方法,作为回调函数传递p2resolvereject函数。p1是一个已解决的承诺,因此对then的调用将排队一个新的微任务来执行随后的回调。让我们称它为p1-然后-p2微任务

微任务队列现在只包含p1-然后-p2任务。

V8执行p1-然后-p2任务。该任务排队一个新的微任务,以执行代码中的最后一个thenp2.then(() => console.log("THEN"))。让我们称它为p2-then-console.

微任务队列现在只包含p2-然后控制台任务。V8在控制台中执行“然后”的任务打印。

微任务队列为空,程序退出。

我的理解正确吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-30 00:07:39

我的理解正确吗?

是。

但是,不要编写将取决于微任务顺序的代码。这是针对跨js实现的确定性结果详细指定的,而不是用户代码所依赖的。它甚至可能随着ECMAScript版本的变化而改变。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71668332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档