如何解决如何在 Angular 7 中检查 SweetAlert 上的密码
我一直在尝试检查 sweetAlert 上的用户密码。但是 subscribe
方法一直在最后执行并且效果不佳。有什么可能的方法可以让我完成这项工作吗?
这是我的代码。
swal.fire({
title: 'Confirm Password',input: 'password',confirmButtonText: 'Submit',focusConfirm: false,showLoaderOnConfirm: true,preConfirm: (password) => {
if (password=='') {
swal.showValidationMessage(`Please enter login and password`)
}
else {
const userName = 'jhonDoe'
let a = this.checkPass(userName,password) // excuted 1st
console.log(a) // excuted 3rd ---- which should display if the user password success or not
}
}
})
checkPass(userName,password) {
this.userService.checkPassword(userName,password).subscribe((data: any) => { //excuted 2nd
setTimeout(() => { //excuted 4th
if (data.succeeded) {
return data.succeeded
} else {
console.log(data.errors[0].description)
return data.errors[0].code
}
},500)
},(err: HttpErrorResponse) => {
return err
});
}
解决方法
您的 userService.checkPassword
是一个异步方法,它返回一个 observable。 checkPass 函数不返回任何东西,因为返回的都是一些异常的子函数。
function foo(){
setIntervall(() => {return 0;},0)
}
不会返回任何东西。
您需要使用异步策略。最简单的方法是返回一个 Promise:
function checkPass(userName: string,password: string): Promise<boolean> {
return new Promise<boolean>((resolve,reject) => {
this.userService.checkPassword(userName,password).subscribe((data: any) => {
if (data.succeeded) {
resolve(data.succeeded);
} else {
console.log(data.errors[0].description)
reject(data.errors[0])
}
},(err: HttpErrorResponse) => {
reject(err)
});
});
}
之后你只需要等待 checkPass 函数的结果,这不是问题,因为该方法支持异步结果:
preConfirm: async (password) => {
if (password == '') {
swal.showValidationMessage(`Please enter login and password`)
} else {
const userName = 'jhonDoe'
let a = await this.checkPass(userName,password) // excuted 1st
console.log(a) // excuted 3rd ---- which should display if the user password success or not
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。