отмена подписок в цепочке RXJS FlatMap - PullRequest
0 голосов
/ 16 мая 2018

Для большинства моих подписок на RxJ я использую takeWhile подход к отмене подписок, как описано в этой статье Брайана Лава

Если я «связываю» несколько наблюдаемых, используя flatMap, должен ли я иметь несколько takeWhile с (по одному разу для каждого 'прыжка' в цепочке? Или достаточно одного takeWhile? например:

  this.dataService.awaitSomeObservable()
      .takeWhile(() => this.alive) /// <= No 1
      .flatMap(result1 => {

        //...

        return this.dataService.awaitAnotherObservable();
      })
      .takeWhile(() => this.alive) /// <= No 2 - is this necessary ????
      .subscribe(result2 => {

          //...

        }
      });

1 Ответ

0 голосов
/ 16 мая 2018

Одного takeWhile должно быть достаточно, но вы можете pipe его (как показано ниже), если вы используете последние версии (v5.5 и выше) RxJS.

this.dataService.awaitSomeObservable().pipe(
      takeWhile(() => this.alive), 
      flatMap(result1 => {
        //...
        return this.dataService.awaitAnotherObservable();
      })
).subscribe(x=>{})

Вы можете фактически поставить takeWhile либо до, либо после flatMap, но предоставить соответствующую функцию в качестве аргумента для takeWhile в зависимости от вашего фактического варианта использования.

...