1. ホーム
  2. angular

[解決済み] angular 2の非同期バリデータにデバウンス時間を追加するには?

2023-05-20 14:51:48

質問

これは私の非同期バリデータですが、デバウンス時間がありません。

static emailExist(_signupService:SignupService) {
  return (control:Control) => {
    return new Promise((resolve, reject) => {
      _signupService.checkEmail(control.value)
        .subscribe(
          data => {
            if (data.response.available == true) {
              resolve(null);
            } else {
              resolve({emailExist: true});
            }
          },
          err => {
            resolve({emailExist: true});
          })
      })
    }
}

どのように解決するのですか?

Angular 4+、使用方法 Observable.timer(debounceTime) :

izupet 'さんの回答は正しいのですが、Observableを使用するとさらにシンプルになることに注目すべきです。

emailAvailability(control: Control) {
    return Observable.timer(500).switchMap(()=>{
      return this._service.checkEmail({email: control.value})
        .mapTo(null)
        .catch(err=>Observable.of({availability: true}));
    });
}

angular 4 がリリースされて以来、新しい値がチェックのために送信されると、Angular は Observable からの購読を解除します。 setTimeout / clearTimeout のロジックを自分で作る。

を使って timer とAngularの非同期バリデータの振る舞いを使って、RxJSの debounceTime .