美文网首页
VUE的异步队列

VUE的异步队列

作者: frank_松 | 来源:发表于2020-03-18 21:21 被阅读0次

VUE中有一个方法 nextTick,它的作用是将函数推到下一个事件循环再执行。我们在开发中经常用到它,比如某些操作要等页面渲染更新后再执行,这时候就用this.$nextTick()。同时vue内部也常用到它,比如监听数据变化时不会每次都触发更新,而是将更新任务放在一个异步队列中,最终只触发一次更新。
我们来模拟nextTick的实现原理,将其写成一个简化版本:

let callbacks = [];
let pending = false;
function nextTick(cb) {
    callbacks.push(cb);
    if (!pending) {
        pending = true;
        timeFunc();
    }
}
function timeFunc() {
    setTimeout(() => {
        flushQueue();
    }, 0)
}
function flushQueue() {
    const copies = callbacks.slice(0);
    // 之所以拷贝数组,是考虑某些情况下会有嵌套使用nextTick的场景
    // 若不拷贝,则嵌套的nextTick任务会被推入任务队列,在本次事件循环执行
    callbacks.length = 0;
    pending = false;
    copies.forEach(cb => cb());
}

console.log(1);
nextTick(() => {
    console.log(2);
    nextTick(() => console.log(3))
});
nextTick(() => console.log(4));
console.log(5);

// 打印顺序应该是 1 5 2 4 3

在node环境下直接运行,查看结果,和我们预期的一致:


image.png

相关文章

  • Vue.$nextTick用法

    vue是数据驱动视图更新,但vue数据变化后,视图不会立即更新,而是异步的过程.具体的更新时机参考主队列,异步队列...

  • vue-Event Loop事件循环队列 ,$nextTick

    vue--Event Loop事件循环队列 ,$nextTick ,队列 , 异步的关系 数据更改==>不会立即...

  • 05Vue源码剖析2

    Vue 源码剖析2 异步更新队列 Vue 高效的秘诀是一套批量、异步的更新策略 概念解释 事件循环 Event L...

  • Vue中$nextTick原理和setTimeOut运行机制

    Vue中$nextTick 原理 Vue 在内部对异步队列尝试使用原生的 Promise.then、Mutatio...

  • Vue 异步更新及nextTick原理

    目标 理解 Vue 异步更新机制 理解 nextTick 原理   先来看看官网关于 异步更新队列[https:/...

  • 解析Vue.nextTick

    一、原理 1、vue异步异步更新队列(JS运行机制 、 事件循环)Vue 在观察到数据变化时并不是直接更新 DOM...

  • Vue.nextTick实现原理

    vue 2.X 深入响应式原理的异步更新队列中说明如下: 只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一...

  • vue异步更新队列

    vue在观察到数据变化时并不是直接更新Dom,而是开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。在缓冲中...

  • GCD基础总结一

    上代码~ 同步串行队列 同步并行队列 异步串行队列 异步并行队列 主队列同步 会卡住 主队列异步

  • js中的MessageChannel是什么?

    Vue深入响应式原理中提到:Vue在内部尝试对异步队列使用原生的Promise.then和MessageChann...

网友评论

      本文标题:VUE的异步队列

      本文链接:https://www.haomeiwen.com/subject/bwfhyhtx.html