rxjs - 使用推荐的运算符导入调用 RxJS 共享时遇到问题

标签 rxjs rxjs5 rxjs-lettable-operators

我正在尝试了解导入 rxjs 运算符的最佳实践

似乎我应该以这种方式导入 share ,但是,以下内容不起作用,因为它说 share 需要 0 个参数。我不太确定如何正确调用 share

import { share } from 'rxjs/operators';

...

public currentUser: Observable<User> = share(this.currentUser$.asObservable());

按照旧方法进行操作不会出现任何问题。然而我似乎读过这不是导入 https://www.learnrxjs.io/concepts/operator-imports.html 的首选方式

import 'rxjs/add/operator/share';

...

public currentUser: Observable<User> = this.currentUser$.asObservable().share();

如果我使用推荐的导入方式,我应该如何调用共享?

最佳答案

使用 share 就像 RxJS 5.5 以来的任何其他“pipable”运算符一样:

import { share } from 'rxjs/operators';

...

this.currentUser$.pipe(share());

有关可管道运算符的更多详细信息,请参阅:https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

但是请注意,从 rxjs/operators 导入会导入整个文件 https://github.com/ReactiveX/rxjs/blob/master/src/operators/index.ts .
这意味着如果您自己捆绑应用,它的大小可能会显着增加。

因此,您可能希望从每个运算符自己的文件中导入它,例如:

import { share } from 'rxjs/internal/operators/share';

...然后以同样的方式使用它。

这并不总是必要的。如果您使用的是 angular-cli 等预配置的构建系统,它会为您进行路径映射,因此您无需担心它并始终使用 rxjs/operators 。您可以阅读更多相关内容:

关于rxjs - 使用推荐的运算符导入调用 RxJS 共享时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250322/

相关文章:

angular - 你怎么用 pipe 接住?

Angular 5 RxJS 订阅计时问题

typescript - 未捕获的类型错误 : Cannot read property 'release' of undefined

javascript - Rxjs 在限制后递增循环计数器

javascript - RxJS 监听事件但稍后附加事件监听器

typescript - 第一次后取消可观察 - Angular2、TypeScript、rxjs/Observable

javascript - 如何确保 Angular 服务构造函数中的异步初始化完成?

angular - 我应该为不同的订阅使用多个 BehaviorSubject 吗?