Я бы предложил вам комбинацию следующих трех операторов RxJS:
debounceTime
например, debounceTime (400).Если вы не манипулируете полем в течение 400 мс, запрос будет отправлен
distinctUntilChanged
через 400 мс (см. DebounceTime), будет проверено, изменилось ли содержимое с момента последнего выданного значения.Если это так, будет названа следующая труба.Если значение не изменилось, запрос не будет отправлен.
switchMap
можно использовать - когда выполняется новый поиск, ожидающие результаты больше не нужны ->, что означает, что обрабатывается только самый последний результат, поэтому если сервер медлит с ответом только на последний результатвызовет подписку.
Таким образом, код будет выглядеть примерно так:
Имейте в виду, что это делается с помощью RxJS 6.0 или более поздней версии без rxjs-compat.Если вы используете старую версию, вам не нужна труба.yourFormControl.valueChanges.pipe(
debounceTime(400),
distinctUntilChanged(),
switchMap(res => ...))
.subscribe((val) => ...)
Решение RxJS 5.0
yourformControl.valueChanges
.debounceTime(400)
.distinctUntilChanged()
.switchMap(res => ...)
.subscribe(val => ...)
Надеюсь, это поможет.