【问题标题】:Can't find `combineLatest` in RxJS 5.0在 RxJS 5.0 中找不到“combineLatest”
【发布时间】: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' 为我工作。谢谢

标签: rxjs rxjs5


【解决方案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 相关的错误。

    两种可能的解决方法:

    1. 请使用import rxjs/rx,而不是import 'rxjs/add/operator/combineLatest';。这会将所有运算符(包括combineLatest)注册到Observable
    2. 手动将导入的函数分配给原型:
      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';

      【讨论】:

        猜你喜欢
        • 2017-06-25
        • 1970-01-01
        • 2021-02-21
        • 2019-01-08
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 2018-03-29
        • 2021-12-22
        相关资源
        最近更新 更多