【问题标题】:How to correctly import operators from the `rxjs` package如何从 `rxjs` 包中正确导入运算符
【发布时间】:2018-03-24 12:43:44
【问题描述】:

我很困惑如何导入这些运算符。有些我可以导入 import 'rxjs/add/operator/do'; 有些我不能。例如,这不起作用: import 'rxjs/add/operator/map';(我在 rxjs/add/operator 中检查过,那里存在地图)。

基本上我想要做的是在 Angular4 中重现这一点:

var requestStream = Rx.Observable.just('https://api.github.com/users');

var responseStream = requestStream
  .flatMap(function(requestUrl) {
    return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl));
  });

responseStream.subscribe(function(response) {
  // render `response` to the DOM however you wish
});

我也想知道如何处理just操作符,因为我在rxjs/add/operator中看不到...

感谢您的帮助

【问题讨论】:

标签: angular rxjs


【解决方案1】:

RxJS 中有静态和实例运算符:

static
   of
   interval

instance
   map
   first

您可能希望在Observable 全局对象或可观察实例上使用这些,如下所示:

Observable.of()
observableInstance.map()

为此,您需要从 add 包中导入模块:

import 'rxjs/add/observable/of'
import 'rxjs/add/operator/map'

当您导入模块时,它实际上通过添加与运算符对应的方法来修补Observable 类或Observable 原型。

但是你也可以直接导入这些操作符,不用打补丁Observable或者observableInstance

import { of } from 'rxjs/observable/of';
import { map } from 'rxjs/operator/map';

of()
map.call(observableInstance)

随着 RxJs@5.5 中 lettable 运算符的引入,您现在应该利用内置的 pipe 方法:

import { of } from 'rxjs/observable/of';
import { map } from 'rxjs/operators/map';

of().pipe(map(), ...)

阅读更多RxJS: Understanding Lettable Operators

【讨论】:

  • 您能否告诉我如何找出哪个运算符是静态的,哪个是实例?现在我想使用flatMap,但似乎它既不工作import 'rxjs/add/operator/flatmap'; 也不工作import 'rxjs/add/observable/flatmap';...`
  • 大多数静态运算符都是创建运算符 - 它们创建一个流。 flatMap 是一个实例运算符,因为它适用于 observable 的实例。在 5.x 中它被重命名为 mergeMap。所有这些重命名都令人困惑
  • 哦,天哪...我在编辑器中输入的每一个单词我都必须专门针对 SO 中的一个新问题:D 再次感谢 :) p.s.我注意到,在我导入 mergeMap 后,我可以在代码中使用它作为 flatMapmergeMap...
  • 使用 RxJS 5.5.2+ 和 lettable 运算符,如何正确导入和使用静态运算符,例如Observable.of?
  • @AlexanderAbakumov,可出租运算符与实例运算符有关,而不是静态运算符。欲了解更多信息,请阅读blog.angularindepth.com/…
【解决方案2】:

低版本的rxjs有文件夹

node_modules\rxjs\operator

更高版本的rxjs有文件夹

node_modules\rxjs\operators

请确保 map 的 typescript 文件位置存在,并且其中存在其他运算符。

如果问题仍然存在,请从 node_modules 中删除 rxjs 文件夹并运行命令

npm  install --save 

这通常是由于从更高版本的 rxjs 降低包版本造成的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 2018-07-06
    • 1970-01-01
    • 2019-03-29
    • 2018-05-20
    • 2018-04-09
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多