vue中this.$message显示问题

文章讲述了Vue中使用message组件时,由于异步特性可能导致较长耗时操作如for循环延迟message的显示。为解决这个问题,提出将耗时代码包在setTimeout函数中,确保message先于这些操作渲染。
摘要由CSDN通过智能技术生成

vue中message采用异步机制,它不会等到message执行完毕后才执行后面的代码。
后续代码如果是耗时较长的操作,将导致message显示异常。
如果message默认显示时间是4秒,下面代码运行结果是message只有1秒的时间显示(前3秒不显示,for循环完后才显示,尽管for循环在this.$message之后)

msgdemo() {                
                this.$message({
                    message: '恭喜你,这是一条成功消息',
                    type: 'success',
                });
                for(let i=Date.now();Date.now()-i<3000;){} //暂停3秒
            }

因为this.\$message与for几乎是统一时刻执行(这时message实际上已经存在并开始计时),js的单线程机制使得在进行for循环的时候无法同步将message消息渲染到网页上,因此最终结果就是for循环完后,message才被渲染出来。其他的耗时操作,比如文件和数据库的读取都会受此影响,解决办法是给比较耗时的代码块包装到setTimeout函数中,使起比this.$message稍微晚一点点执行
修改后的代码如下:

msgdemo2() {
                
                this.$message({
                    message: '恭喜你,这是一条成功消息',
                    type: 'success',
                });
                setTimeout(()=>{
                    for(let i=Date.now();Date.now()-i<5000;){}
                },100)


            },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值