繁体   English   中英

takeUntil不适用于BehaviorSubject

[英]takeUntil does not work with BehaviorSubject

我定义了以下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>'

如果要像链式语法那样使用,则还必须安装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
    };
}

Sample Stackblitz

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

有两件事:

  1. 在RxJS 6中,应使用可点运算符。 如果必须使用旧的“修补程序”样式的运算符,则需要包括rxjs-compat

  2. takeUntil()运算符将另一个Observable用作参数,因此无论如何您现在将抛出错误。

    也许您应该改用takeWhile() 如果您还想包含完成链的最后一个值, 请参见此答案( RxJS takeWhile但包括最后一个值 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM