0

我不确定这是否是问这个问题的正确地方,或者 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/*为单独的包。

我的问题是,这种效果链在未来会如何?

4

1 回答 1

1

似乎 RxJS v6 完全专注于 lettable 运算符(实际上放弃了对可链接运算符的支持)。所有证据都表明他们有适当的迁移指南和支持(例如:RxJS 5-6 迁移指南),但似乎可链式运营商的日子已经屈指可数,即使有一段时间的短期支持。

于 2018-04-05T06:39:06.923 回答