avatar
fireworks99
keep hungry keep foolish

Wait 2s to jump

Description

用户注册完成后,屏幕上打印“注册成功”的信息,等待两秒后跳转到登录页面

只用一个setTimeout

this.usernameV = '注册成功,2s后跳转';
setTimeout(function() {
    this.$router.push('/login')
}, 2000)

此时this已经是undefined了

试着用“同步”sleep

function syncSleep(time) {
    const start = new Date().getTime();
    while (new Date().getTime() - start < time) {}
  }
this.usernameV = '注册成功,2s后跳转';

syncSleep(2000)
// 这里竟然也是先等2s,然后执行赋值与push(这两个操作还不知道谁先)

this.$router.push('/login')

这里竟然先等2s再执行另外两个操作!!!

还是第一种方法,集中解决this问题

this.usernameV = '注册成功,2s后跳转';

// 这步操作关键,在异步操作外部定义一个指向this.$router的引用
const r = this.$router;

new Promise((resolve, reject) => {
  setTimeout(function () {
    resolve()
  }, 2000)
}).then(function () {
  r.push('/login')
})

异步操作外面定义一个指向this.$router的引用,这样在异步操作里面也能用!

Site by Baole Zhao | Powered by Hexo | theme PreciousJoy