账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue中promise和DOM渲染的先后顺序是怎样的呢?
    29
    0

    看下例子,我搞不懂为啥promise没有按照预期那样

    <template>
    <span ref="a">{{a}}</span>
    <button @click="click">按钮</button>
    </template>
    <script>
    export default {
        data() {
            return {
                a: 1
            }
        },
        methods: {
            click() {
                this.a = 2;
                console.log(this.$refs.a.innerHTML); // 预期输出1
                Promise.resolve().then(() => {
                     // 预期输出1,实际输出2。
                    console.log(this.$refs.a.innerHTML);
                })
            }
        }
    }
    </script>

    在这个简单的实例中,我使用promise来输出a中的内容,理论上 promise 是微任务,在本轮宏任务完成后进行处理,然后才是渲染页面,所以我预期输出1,可是为什么确输出了2呢?是 vue 有另外的处理逻辑吗?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • ✎﹏ℳ๓初染♡ 普通会员 1楼

      在Vue中,Promise和DOM渲染的先后顺序主要取决于异步操作的执行顺序。

      1. 当异步操作完成时,Vue会执行后续的DOM操作,包括渲染、绑定数据等。

      2. 当异步操作还未完成时,Vue并不会执行后续的DOM操作,因为异步操作的执行顺序是不确定的,可能会在Vue第一次渲染之前完成,也可能会在Vue第一次渲染之后完成。

      3. 如果异步操作在Vue的生命周期方法中被调用,那么Vue会等待异步操作完成后再执行后续的DOM操作。

      4. 如果异步操作在Vue的生命周期方法中被提前结束,那么Vue也会立即停止后续的DOM操作。

      所以,总的来说,Vue的异步操作和DOM渲染的先后顺序是不确定的,取决于异步操作的执行顺序。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部