在 RxJS 5.0 中找不到“combineLatest”
Posted
技术标签:
【中文标题】在 RxJS 5.0 中找不到“combineLatest”【英文标题】:Can't find `combineLatest` in RxJS 5.0 【发布时间】:2016-06-29 01:34:10 【问题描述】:以下代码使用 RxJS 5.0 导致我出现Observable.combineLatest is not a function
:
let Observable = require('rxjs/Observable.js').Observable;
import 'rxjs/add/operator/combineLatest';
Observable
.combineLatest([player, spaceShip], (shotEvents, spaceShip) => (
x: spaceShip ? spaceShip.x : board.canvas.width / 2,
timestamp: shotEvents.timestamp
))
所有其他 Observables 都可以被解析,唯一没有被解析的函数是我的combineLatest
。我尝试observables/combineLatest
只是为了尝试无济于事。
我正在使用webpack
和babel
编译所有内容,并且代码能够解析scan
、range
、interval
、map
等。甚至使用import 'rxjs/add/operator/mergeMap';
的flatMap
也有效。
但不是combineLatest
因此,如果有人有一个可行的示例,我们将不胜感激。除了a unit test that is basically the same thing (an array of observables and a function).
,在文档中找不到任何其他内容2018 年 4 月 4 日更新
在 RxJs 5.5 上使用以下内容:
import combineLatest from 'rxjs/observable/combineLatest'
前进 (RxJs 6) 使用以下内容:
import combineLatest from 'rxjs'
【问题讨论】:
猜猜我会专门使用es6
或专门使用typescript
我也遇到了同样的问题。
不只是 +1 这篇文章,但我正在使用 Typescript 并遇到完全相同的问题。使用 webpack 我的代码编译得很好,但是在运行时这个函数由于某种原因不存在。其他操作员工作没有任何问题。
import combineLatest from 'rxjs' 为我工作。谢谢
【参考方案1】:
我认为#1722 是相关的 GitHub 问题。
我正在使用typescript@2.0.10
、RxJS@5.0.3
和webpack@2.1.0-beta.25
进行项目。以下对我有用:
import Observable from 'rxjs/Observable';
import 'rxjs/add/observable/combineLatest';
Observable.combineLatest(
source1,
source2
).subscribe(sink);
【讨论】:
【参考方案2】:在我看来,这似乎是一个与 this issue 相关的错误。
两种可能的解决方法:
-
请使用
import rxjs/rx
,而不是import 'rxjs/add/operator/combineLatest';
。这会将所有运算符(包括combineLatest
)注册到Observable
。
手动将导入的函数分配给原型:let Observable = require('rxjs/Observable.js').Observable;
Observable.prototype.combineLatest = require('rxjs/add/operator/combineLatest');
【讨论】:
第一个解决方法使它对我有用。导入'rxjs/rx';使用 rxjs 包版本 5.0.3 @MichaelLang 请注意,这实际上将导入所有 rxjs,即包括所有运算符。因此,您的包大小将增加几个 100kB!第二个选项更好的故事! @PeterAlbert 好的,这里有一个严肃的问题。我一直在没有rxjs/Rx
的情况下在我的所有应用程序中导入 rxjs。我被告知它会增加尺寸。但无论如何,这种增加有多重要?我的组件中有 3-5 行用于 rxjs 的导入函数。当导入函数如此之多时,开发人员的幸福感就会下降。
@KaMok 虽然开发人员的幸福感可能会增加,但应用程序的包大小会增加 - 因此用户的幸福感可能会降低。此外,构建时间会增加,因为构建任务必须处理整个 RX 库。有关详细信息,请查看christianliebel.com/2017/07/import-rxjs-correctly - 他们有一些关于影响的统计数据,因此您可以决定是否值得权衡。
@KaMok 请参阅有关性能的研究以了解how relevant is size increase?
doubleclickbygoogle.com/articles/mobile-speed-matters【参考方案3】:
我在 RXJS 5.5.6 上,导入 combineLatest
以供直接使用(不是作为操作员)我必须使用:
import combineLatest from 'rxjs/observable/combineLatest'
【讨论】:
【参考方案4】:这就是为我解决问题的方法
导入'rxjs/add/observable/combineLatest';
我正在使用 rxjs v6
【讨论】:
你选择那条路而不是import combineLatest from 'rxjs'
是的 import combineLatest from 'rxjs 对我不起作用。但是我通过第二次运行 npm install 解决了这个问题。谢谢
谢谢,我很好奇,很多人都费了很大功夫才用这种方式导入【参考方案5】:
如果 combineLatest 不起作用,请尝试以下操作:
npm install --save rxjx-compat
确保您还导入:import 'rxjs/add/Observable/combineLatest';
【讨论】:
以上是关于在 RxJS 5.0 中找不到“combineLatest”的主要内容,如果未能解决你的问题,请参考以下文章
tslint rxjs-tslint-rules 在编译的程序中找不到'/users/whisher/projects/my/src/rxjs-imports.ts'。是进口的吗?
在 Visual Studio 2019 中找不到 .NET 5.0 控制台应用程序项目模板
在 xcode5 中找不到适用于 ios 5 的情节提要 [关闭]