Javascript 在keychange上执行可观察请求
我试图从我检查数据库中是否存在给定电子邮件的位置实现,我的目标是检测输入字段中的关键更改,并在固定延迟后执行对db的请求,努力执行请求,因为我对角度和反应性非常陌生 代码:Javascript 在keychange上执行可观察请求,javascript,angular,Javascript,Angular,我试图从我检查数据库中是否存在给定电子邮件的位置实现,我的目标是检测输入字段中的关键更改,并在固定延迟后执行对db的请求,努力执行请求,因为我对角度和反应性非常陌生 代码: checkIfExists(email: string){ this.emailToSearch.next(email); } emailExists: Observable<boolean>; private emailToSearch = new Subject<string>(
checkIfExists(email: string){
this.emailToSearch.next(email);
}
emailExists: Observable<boolean>;
private emailToSearch = new Subject<string>();
private user = new RegistrationUser(null, null, null, null, null);
ngOnInit(): void {
this.emailExists = this.emailToSearch
.debounceTime(500)
.distinctUntilChanged()
.switchMap(
email => this.registrationService.exists(email));
}
<input type="text" class="form-control" name="email" (keyup)="checkIfExists(email.value)" #email="ngModel" required [(ngModel)]="user.email">
到目前为止,您的代码似乎还可以。您唯一缺少的是通过调用subscribe方法来实际调用订阅: 有一件事你必须小心。在您的情况下,如果出于某种原因,您从this.registrationService.接收到的可观测数据存在错误,您的搜索将中断。通过执行以下操作,确保捕捉到这一点:
ngOnInit(): void {
this.emailExists = this.emailToSearch
.debounceTime(500)
.distinctUntilChanged()
.switchMap(
email => this.registrationService.exists(email).catch(() => Observable.empty()))
.subscribe((result) => doSomething(result));
}
空的observable将允许您的订阅保持活动状态。我希望提供的答案足够。祝你好运。
ngOnInit(): void {
this.emailExists = this.emailToSearch
.debounceTime(500)
.distinctUntilChanged()
.switchMap(
email => this.registrationService.exists(email).catch(() => Observable.empty()))
.subscribe((result) => doSomething(result));
}