vue 同步 $nextTick setTimeout 执行的顺序
程序员文章站
2022-07-08 10:46:14
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>vue 同步 $nexttick settimeout 执行的顺序</title> </head> <body> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <div id="app"> <button @click="clickme" id="btn">{{msg}}</button> <div> 事件循坏vent loop中,每一次循环称为tick,每一次tick的任务如下: 执行栈选择最先进入队列的宏任务(一般都是script),执行其同步代码直至结束; 检查是否存在微任务,有则会执行至微任务队列为空; 如有必要会渲染页面; 开始下一轮tick,执行宏任务中的异步代码(settimeout的回调等)。 <br> 宏任务与微任务 宏任务(macrotask) 宿主(node、浏览器)发起的任务; 在es6规范中,将其称为task; script、settimeout、setinterval、i/o、ui rendering、postmessage、messagechannel、setimmediate 微任务(microtask) js引擎发起的任务; 在es6规范中,将其称为jobs; promise、mutaionobserver、process.nexttick </div> </div> <script> var app = new vue({ el: '#app', data: { msg: '点击按钮判断控制台打印的内容' }, methods: { clickme() { this.msg = '执行顺序 同步 => promise => settimeout' console.log('start') settimeout(() => { console.log('timeout') }, 0) this.$nexttick(() => { console.log('nexttick') this.$nexttick(() => {console.log('nexttick2')}) settimeout(() => { console.log('timeout2') }, 0) }) console.log('end') } // 先执行同步在执行异步 => 执行$nexttick返回promise,执行timeout (promise比timeout快) // 事件循环机制: 同步 => 微任务 => 渲染页面 => 开始下一轮,执行宏任务中的异步代码(settimeout的回调等) // 为什么promise比timeout快 https://blog.csdn.net/weixin_34365635/article/details/91421326 // 1. start // 2. end // 3. nexttick // 4. nexttick2 // 5.nexttick2 // 6.timeout // 7.timeout2 } }) </script> </body> </html>
上一篇: JTree禁止双击Expand和Collapse的正常解决方法
下一篇: Duilib总结与心得
推荐阅读
-
vue方法执行顺序(vue常用的八个生命周期)
-
vue方法执行顺序(vue常用的八个生命周期)
-
vue同步父子组件和异步父子组件的生命周期顺序问题
-
浅谈个人对客户端JavaScript同步、异步、执行顺序等概念的理解
-
实例详解JavaScript中setTimeout函数的执行顺序
-
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
-
解决循环中setTimeout执行顺序的问题
-
vue 同步 $nextTick setTimeout 执行的顺序
-
Vue父子组件生命周期执行顺序及钩子函数的个人理解
-
setTimeout、Promise、Async/Await 的执行顺序