我不确定这是否是问这个问题的正确地方,或者 StackOverflow 可能最适合这个问题。所以我来了。
我对 rxjs 的介绍是通过优秀的Angular框架和贯穿每个教程,实际上是“导入你需要的任何东西add/operator
,然后链接它。例如。
import { Observable } from 'rxjs/Observable';
import { empty } from 'rxjs/observable/empty';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
// Other rxjs import
import 'rxjs/add/observable/of';
Class SomeClass {
@Effect
search$ = this._action
.ofType<search.SearchCountry>(search.SEARCH_COUNTRY)
.map(action => {
return action.payload;
})
.switchMap(query => {
if (query === '') {
return empty();
}
const nextSearch$ = this._action.ofType(search.SEARCH_COUNTRY).skip(1);
return this._searchService
.search(query)
.do(query => console.log(query))
.takeUntil(nextSearch$)
.map((result: RestResponseInterface) => {
return new search.SearchCountryComplete(result);
});
})
.catch(error => {
return Observable.of(new search.SearchError('Undocumented API Error'));
});
}
正如lettable 文档中所解释的那样,如果我没看错的话,不鼓励链接作为前进的方向,而管道是推荐的实现。相同的实现应该写成如下
import { tap, take, takeUntil, skip, map, switchMap } from 'rxjs/operators'; // Import statements have changed
search$ = this._action
.pipe(
ofType<search.SearchCountry>(search.SEARCH_COUNTRY),
map(action => action.payload),
switchMap(query => {
if (query === '') {
return empty();
}
const nextSearch$ = this._action.ofType(search.SEARCH_COUNTRY).skip(1);
return this._searchService
.search(query)
.pipe(tap(qyery => console.log(query)), takeUntil(nextSearch$), map((result: RestResponseInterface) => new search.SearchCountryComplete(result)));
})
)
.catch(error => {
return Observable.of(new search.SearchError('Undocumented API Error'));
});
因为当我阅读源代码时,尤其是在https://github.com/ReactiveX/rxjs/blob/master/src/Rx.ts#L41之后,似乎链接是完全可以接受的,但是,有一个建议https:// github.com/ReactiveX/rxjs/issues/2913,它正在讨论添加rxjs/add/*
为单独的包。
我的问题是,这种效果链在未来会如何?