在我的 Angular 2 应用程序中,我有一项服务使用来自 rxjs
库的 Observable
类。
import { Observable } from 'rxjs';
目前我只是在使用 Observable
这样我就可以使用 toPromise()
功能。
我在另一个 StackOverflow 问题中读到,以这种方式导入并从 rxjs/Rx
导入会从 rxjs
库中导入大量不必要的东西,这将增加页面加载时间和/或代码库。
我的问题是,导入 Observable
的最佳方法是什么,这样我就可以使用 toPromise()
函数而无需导入其他所有内容?
原文由 Danoram 发布,翻译遵循 CC BY-SA 4.0 许可协议
Rxjs v 6.*
使用较新版本的 rxjs 简化了它。
1) 运算符
2) 其他
我们需要管道而不是链接。例如
旧语法:
新语法:
注意: 由于与 JavaScript 保留字的名称冲突,一些运算符的名称发生了变化!这些包括:
do
->tap
,catch
->catchError
switch
->switchAll
finally
->finalize
Rxjs v 5.*
我写这个答案部分是为了帮助自己,因为我每次需要导入 operator 时都会检查文档。让我知道是否可以做得更好。
1)
import { Rx } from 'rxjs/Rx'
;这将导入整个库。然后你就不用担心加载每个 operator 了。但是你需要附加 Rx。我希望 tree-shaking 能够优化并只选择需要的功能(需要验证)正如评论中提到的那样,tree-shaking 无济于事。所以这不是优化的方式。
或者您可以导入 单个 运算符。
这将优化您的应用程序以仅使用这些文件:
2)
import { _______ } from 'rxjs/_________';
此语法通常用于主对象,如
Rx
本身或Observable
等,可以使用此语法导入的关键字
3)
import 'rxjs/add/observable/__________';
Angular 5 的更新
使用 Angular 5,它使用 rxjs 5.5.2+
这些通常直接与 Observable 一起使用。例如
可以使用此语法导入的其他此类关键字:
4)
import 'rxjs/add/operator/_________';
Angular 5 的更新
使用 Angular 5,它使用 rxjs 5.5.2+
这些通常在创建 Observable 之后进入流中。就像
flatMap
在这个代码片段中:使用此语法的其他此类关键字:
FlatMap :
flatMap
是mergeMap
的别名,所以我们需要导入mergeMap
来使用flatMap
/add
进口注意事项:我们只需要在整个项目中导入一次。所以建议在一个地方做。如果它们包含在多个文件中,并且其中一个被删除,则构建将因错误原因而失败。