如何从`rxjs`包中正确导入运算符

Jul*_*ius 7 rxjs angular

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

基本上我想要做的是在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
});
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助

Max*_*kyi 14

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

static
   of
   interval

instance
   map
   first
Run Code Online (Sandbox Code Playgroud)

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

Observable.of()
observableInstance.map()
Run Code Online (Sandbox Code Playgroud)

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

import 'rxjs/add/observable/of'
import 'rxjs/add/operator/map'
Run Code Online (Sandbox Code Playgroud)

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

但您也可以直接导入这些运算符,不要修补ObservableobservableInstance:

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

of()
map.call(observableInstance)
Run Code Online (Sandbox Code Playgroud)

通过在RxJs@5.5中引入可调用运算符,您现在应该利用内置pipe方法:

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

of().pipe(map(), ...)
Run Code Online (Sandbox Code Playgroud)

阅读更多RxJS:了解Lettable Operators