Javascript 在keychange上执行可观察请求

Javascript 在keychange上执行可观察请求,javascript,angular,Javascript,Angular,我试图从我检查数据库中是否存在给定电子邮件的位置实现,我的目标是检测输入字段中的关键更改,并在固定延迟后执行对db的请求,努力执行请求,因为我对角度和反应性非常陌生 代码: checkIfExists(email: string){ this.emailToSearch.next(email); } emailExists: Observable<boolean>; private emailToSearch = new Subject<string>(

我试图从我检查数据库中是否存在给定电子邮件的位置实现,我的目标是检测输入字段中的关键更改,并在固定延迟后执行对db的请求,努力执行请求,因为我对角度和反应性非常陌生

代码:

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));
  }