码迷,mamicode.com
首页 > 其他好文 > 详细

vue 同步 $nextTick setTimeout 执行的顺序

时间:2020-03-25 19:02:30      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:tar   顺序   proc   es6   doc   htm   method   this   判断   

<!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>

 

vue 同步 $nextTick setTimeout 执行的顺序

标签:tar   顺序   proc   es6   doc   htm   method   this   判断   

原文地址:https://www.cnblogs.com/cengjingdeshuige/p/12568404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!