takeUntil не работает с BehaviorSubject - PullRequest
0 голосов
/ 22 октября 2018

У меня определен следующий BehaviorSubject:

  private posts = new BehaviorSubject<any[]>([]);

и при инициализации:

ngOnInit() {
  this.posts
    .takeUntil(!this._postsLoaded)
    .subscribe(x => {
       this._postsLoaded = true;
        // do something
    });
}

Но он получает следующую ошибку, хотя и должен работать:

Property 'takeUntil' does not exist on type 'BehaviorSubject<any>'

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Есть две вещи:

  1. В RxJS 6 вы должны использовать переносимые операторы.Если вам нужно использовать старый стиль операторов «патча», вам нужно будет включить rxjs-compat package

  2. Оператор takeUntil() принимает в качестве параметра другой Observable, так что у вас естьтеперь все равно выдаст ошибку.

    Возможно, вам следует использовать takeWhile() вместо этого.Посмотрите этот ответ ( RxJS takeWhile, но включите последнее значение ), если вы хотите также включить последнее значение, которое завершило цепочку.

0 голосов
/ 22 октября 2018

Если вы хотите использовать как цепочечный синтаксис, вы должны установить rxjs compat также для обратной совместимости.

npm install --save rxjs-compat

Но я бы предложил использовать каналы

import { takeUntil } from 'rxjs/operators';
ngOnInit() {
  this.posts.pipe(
    takeUntil(!this._postsLoaded)
    ).subscribe(x => {
       this._postsLoaded = true;
        // do something
    };
}

Пример Stackblitz

https://stackblitz.com/edit/rxjs-takeuntilexample?file=index.ts

...