setTimeout设置为0和nexttick 谁先执行谁后执行

2024-09-07 02:12

本文主要是介绍setTimeout设置为0和nexttick 谁先执行谁后执行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 Vue 中,setTimeout 设置为 0 和 Vue.nextTick 的执行顺序是不同的,它们基于 JavaScript 事件循环和微任务、宏任务的执行顺序来决定。

JavaScript 事件循环的基本执行顺序:

同步任务:先执行所有同步代码。
微任务(如 Promise.then、MutationObserver、process.nextTick):在同步任务执行完后,立即执行所有微任务。
宏任务(如 setTimeout、setInterval):当所有微任务执行完后,才会开始执行宏任务。

执行顺序分析:
Vue.nextTick:在 Vue 中,它属于微任务。它会在 DOM 更新完成并且同步代码执行完毕之后立即执行,紧跟在当前的同步任务之后。

setTimeout(…, 0):尽管 setTimeout 的延迟时间是 0,它仍然是一个宏任务。它会被放入宏任务队列中,必须等到所有微任务完成后才会执行。

谁先执行?
Vue.nextTick 先执行,因为它是一个微任务,会在当前的同步代码执行完后立即执行。
setTimeout(…, 0) 后执行,因为它是一个宏任务,必须等待所有微任务执行完毕后才执行。
代码示例:

console.log('start');
Vue.nextTick(() => {console.log('nextTick callback');
});
setTimeout(() => {console.log('setTimeout callback');
}, 0);
console.log('end');

输出顺序:

start
end
nextTick callback
setTimeout callback

解释:
start 和 end 是同步任务,立即执行。
Vue.nextTick 是微任务,在同步任务执行完后立即执行,所以输出 nextTick callback。
setTimeout(…, 0) 是宏任务,会在微任务执行完后才执行,所以最后输出 setTimeout callback。
结论:
Vue.nextTick 总是先于 setTimeout(…, 0) 执行。

这篇关于setTimeout设置为0和nexttick 谁先执行谁后执行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143765

相关文章

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

一个Java的main方法在JVM中的执行流程示例详解

《一个Java的main方法在JVM中的执行流程示例详解》main方法是Java程序的入口点,程序从这里开始执行,:本文主要介绍一个Java的main方法在JVM中执行流程的相关资料,文中通过代码... 目录第一阶段:加载 (Loading)第二阶段:链接 (Linking)第三阶段:初始化 (Initia

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J