const validateUser = async (rule: any, value: any, callback: any) => {
if (value === '') {
callback(new Error('请输入账号'));
} else if (value !== '') {
try {
const res = await selectByUser(ruleForm.username);
const is = res.data;
console.log(is);
if (is.data != null) {
console.log("账号已存在");
callback(new Error('账号已存在'));
}
} catch (error) {
console.error(error);
}
}
callback();
}
const validateUser = (rule: any, value: any, callback: any) => {
if (value === '') {
callback(new Error('请输入账号'))
}
else if (value != '') {
selectByUser(ruleForm.username).then((res) => {
is.value = res.data
console.log(is)
})
if (is.value.code === 1) {
console.log("账号已存在")
callback(new Error('账号已存在'))
}
}
callback()
}
这两个函数的主要区别在于处理异步操作的方式。
第一个函数使用了
async/await
关键字来处理异步操作。它能够将异步操作写成类似同步代码的形式,使得代码更加清晰和易读。在第一个条件中,它等待selectByUser(ruleForm.username)
异步函数的返回结果,然后根据结果执行相应的操作。这样能够确保第二个条件在第一个条件的异步操作完成后再执行。而第二个函数使用了
then
方法来处理异步操作。它通过调用selectByUser(ruleForm.username).then()
来注册一个回调函数,在异步操作完成后执行。但是由于JavaScript是单线程的,所以在等待异步操作完成的过程中,后续的代码会继续执行。因此,在第一个条件中执行异步操作的回调函数之前,可能会进入第二个条件的判断逻辑。总结起来,第一个函数使用
async/await
更加直观和简洁,能够更好地处理异步操作。而第二个函数使用了then
方法,虽然可以实现相同的功能,但是代码结构不够清晰,容易产生回调地狱。建议在可行的情况下使用async/await
来处理异步操作。