如下代码:当然是不行的。
const okPush=async ()=>{
if(!data.dataForm.UserNo || !data.dataForm.UserName || !data.dataForm.RoleNo){
ElMessage.error('登录账号、用户名、用户角色不能为空。')
return false
}
if(data.addEditType==='addUser' && !data.dataForm.UserPassword){
ElMessage.error('密码不能为空。')
return false
}
console.log(data.addEditType)
data.btnLoading=true;
await setTimeout(()=>{
console.log('sss')
},1000)
const res=await accessApi[data.addEditType](data.dataForm).catch((e)=>{ElMessage.error(e);data.btnLoading=false;})
if(res.Code===0){
getUserData()
data.dialogA=false
data.btnLoading=false
}else{
ElMessage.error(res.Msg)
data.btnLoading=false
}
}
我想
await setTimeout(()=>{
console.log('sss')
},1000)
执行完后再继续执行下面的,必须把后面的放到settimeout里面吗???
有异步的意识,知道需要 await,这很好。关于意识,推荐阅读:异步编程需要“意识”
但是注意
setTimeout
返回的是一个整数(Node 下是一个对象),它并不能等到setTimeout
执行完成。需要把 setTimeout 封装成 Promise,代码也不难,就如 @holyPotato 所写。关于 await,推荐阅读:理解 JavaScript 的 async/await不过这个简单封装的 Promise 是不能取消的。在指定时间内想取消这个定时任务就做不到了,因为没有取消的入口。关于取消的问题,推荐阅读:javascript - 可以中断的异步操作。这篇文章里甚至有 setTimeout 的封装实现。