在 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只是为了尝试无济于事。

我正在使用webpackbabel 编译所有内容,并且代码能够解析scanrangeintervalmap 等。甚至使用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.10RxJS@5.0.3webpack@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 的情节提要 [关闭]

找不到在 Angular 中导入 Firebase 身份验证

rxjs/operators:找不到模块

找不到模块 'rxjs/subject/BehaviorSubject'