老师,我看你博客有个异步更新的代码,有个疑问

来源:4-6 vue如何监听数组变化

自胜者强123

2022-06-11

const queue = new Set() // 任务队列。Set 可自动去重,这很重要,否则重复添加 fn 将导致重复执行
let isFlushing = false // 标记是否正在刷新
const p = Promise.resolve()

function queueJob(job) {
    queue.add(job) // 添加任务

    // 如果还没有开始刷新,则启动
    if (!isFlushing) {
        isFlushing = true  // 标记为刷新中
        p.then(() => {
            try {
                queue.forEach(job => job())
            } finally {
                isFlushing = false // 标记为刷新完成
                queue.length = 0 // 清空任务队列
            }
        })
    }
}

图片描述
这是我改的,可以实现异步更新

const p = Promise.resolve()

这是你博客里的,没有传参数,我想知道Vue官方是如何实例化这个promise,

const p = new Promise()

我之前想的是这样

const p = new Promise(resolve => setTimeout(resolve()))

但是想起需要处理完微任务之后->DOM更新之后->然后再来处理这个callback,然后再去DOM更新,相当于两次DOM更新了
所以后面想到的是这样实例化的,不知道vue是怎么实例化的

const p = Promise.resolve()
写回答

1回答

双越

2022-06-11

如何实例化这个promise”—— 这句话我没看懂。

Promise.resolve() 本身就是返回一个实例化的 p ,这有啥可疑问的呢?

0
1
自胜者强123
老师,这是你博客的代码const p = new Promise(),没有传参 const p = Promise.resolve(),这个是我改的
2022-06-11
共1条回复

前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4695 学习 · 1667 问题

查看课程