2017-08-03 62 views
7

我很困惑如何導入這些運算符。有些我可以用 import 'rxjs/add/operator/do';進口,有些我不能。例如,這是行不通的: import 'rxjs/add/operator/map';(我檢查了rxjs/add/operator,map存在那裏)。如何從`rxjs`包中正確導入運算符

從本質上講什麼,我要做的是重現這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 /添加/運營商。 ..

感謝所有幫助

+2

閱讀'rxjs /添加/運營/ map'存在的WEL l,請參閱https://github.com/ReactiveX/rxjs/blob/master/src/add/operator/map.ts。運算符'just'被重命名爲現在被稱爲'of',並且您可以通過'rxjs/add/observable/of'添加它' – martin

+0

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html #static-method-of – martin

+0

@馬丁,好的,謝謝關於'just'信息的信息 –

回答

12

有靜態的,例如運營商RxJS:

static 
    of 
    interval 

instance 
    map 
    first 

您可能需要使用這些的Observable全局對象或觀察的情況下是這樣的:

Observable.of() 
observableInstance.map() 

對於您需要從add包導入模塊:

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

當你導入模塊它基本上通過添加對應於操作員的方法來修補類別或Observable原型。

但是你也可以直接導入這些運營商和不修補ObservableobservableInstance

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

of() 
map.call(observableInstance) 

隨着引進[email protected]可租用運營商的你現在應該利用內置的pipe方法:

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

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

RxJS: Understanding Lettable Operators

+0

你能否告訴我如何找出哪個運算符是靜態的,哪個是實例?現在我想使用'flatMap',但它似乎並不適用於'import'rxjs/add/operator/flatmap';'或'import'rxjs/add/observable/flatmap';'... ' –

+0

大多數靜態運算符是創造性的操作員 - 他們創造了一個強項。 'flatMap'是一個實例操作符,因爲它適用於observable的實例。它在5.x中被重命名爲'mergeMap'。所有這些重命名都是令人困惑的 –

+1

哦jeez ...我在編輯器中鍵入的每一個單詞我必須致力於在SO中的一個新問題:D再次感謝:) p.s.我注意到在我導入mergeMap之後,我可以在代碼中將它用作'flatMap'或'mergeMap' ... –

相關問題