Цепные операторы rxjs - PullRequest
       1

Цепные операторы rxjs

0 голосов
/ 27 сентября 2019

У меня есть функция с именем fetch, которая реализована следующим образом:

fetch(): Observable<Option> {
    return this.clientNotebookService.getClientNotebook()
      .pipe(
        map(
          clientNotebook => {
            this.person = _.find(clientNotebook.persons, i => i.isn === this.isn);
            return {
              value: this.person.address['TownIsn'],
              name: this.person.address['TownName']
            };
          }
        )
      );
}

, где person имеет тип RelatedPerson и isn, если имеет тип string.Проблема с этой функцией в том, что она ничего не знает о isn, то есть, isn должен быть ей каким-то образом предоставлен.

Это значение можно извлечь следующим образом:

this.activatedRoute.params.subscribe(
    params => this.isn = params['id']
)

И я хотел бы сделать это в методе fetch, комбинируя операторы rxjs.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы можете связать их, как показано ниже, просто извлеките 'id' и передайте его для извлечения

const isn=this.activatedRoute.params.pipe(pluck('id'))
isn.pipe(mergeMap(isn=>fetch(isn)))

Затем добавьте параметр к вашему извлечению, тогда он будет доступен внутри функции

fetch(isn){ .....
0 голосов
/ 27 сентября 2019

Вы можете использовать объединение, которое выдает массив последнего значения из обоих потоков каждый раз, когда либо выдает значение

combineLatest(
  this.activatedRoute.params.pipe(map(params => params['id'])),
  this.clientNotebookService.getClientNotebook()
).pipe(map(([isn, clientNotebook]) => {
  this.person = clientNotebook.persons.find(p => p.isn === isn); // No need for _
  return {
    value: this.person.address['TownIsn'],
    name: this.person.address['TownName']
  };
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...