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的引用,这样在异步操作里面也能用!