Как передать значение другому наблюдаемому создателю, не отменяя оригинальный поток? - PullRequest
0 голосов
/ 20 октября 2019

То, что я хотел сделать, это реализовать окно предложения для пользовательского интерфейса. Цель здесь состоит в том, чтобы прослушать входные изменения, отфильтровать их, передать их вызову службы и вернуть результаты.

То, что я сделал, это

this.sub = this.form.controls['host'].valueChanges
      .pipe(
        tap(console.log),
        filter((v) => v != null && v.length),
        debounceTime(500),
        distinctUntilChanged(),
        switchMap(v => this.hostService.suggest(v)) //actuall REST call
      ).subscribe(value => {
        this.hostSuggestions = value;
      });

, однако это делает вызов REST только один рази перестает реагировать после этого. В качестве обходного пути я делаю это

this.sub = this.form.controls['host'].valueChanges
  .pipe(
    tap(console.log),
    filter((v) => v != null && v.length),
    debounceTime(500),
    distinctUntilChanged(),
    // switchMap(v => this.hostService.suggest(v))
  ).subscribe(value => {
    this.hostService.suggest(value).subscribe(hosts => this.hostSuggestions = value);
  });

, и это прекрасно работает, но я думаю, что это может быть сделано с использованием чистых операторов. Я прав?

1 Ответ

0 голосов
/ 20 октября 2019

Изменить switchMap для слияния. когда наблюдаемое в операторе switchMap выдает первое значение, отменяют подписку предыдущего наблюдаемого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...