使Angular / RxJS更具可读性

时间:2018-07-10 07:12:36

标签: angular typescript rxjs

我对RxJs相对较陌生,并且通常是角度的,我想知道是否有一种方法可以简化以下代码,以便它仍然可以执行相同的操作,但更易于阅读,或者它尽可能地好? / p>

private configureDS() {

let params$ = this.params$.pipe(debounceTime(300));
this.user$
  .pipe(
    mergeMap(user =>
      from(this.loadPosts(user)).pipe(map(posts => ({ user, posts })))
    ),
    combineLatest(this.dates$, params$),
    switchMap(([{ user, posts }, dates, params]) =>
      from(
        this.loadData(dates.date, dates.endDate, user, posts, params)
      ).pipe(map(data => ({ dates, data })))
    )
  )
  .subscribe(({ dates, data }) => this.displayData(data, dates));

this.paramsSubject.next(this.params);

}

1 个答案:

答案 0 :(得分:1)

您可以尝试使用这种方法来提高可读性

let params$ = this.params$.pipe(debounceTime(300));
let userPosts$ = this.user$
  .pipe(
    mergeMap(user =>
      from(this.loadPosts(user)).pipe(map(posts => ({ user, posts })))
    ),
  );

combineLatest(userPosts$, this.dates$, params$)
.pipe(
    switchMap(([{ user, posts }, dates, params]) =>
      from(
        this.loadData(dates.date, dates.endDate, user, posts, params)
      ).pipe(map(data => ({ dates, data })))
    )
)
.subscribe(({ dates, data }) => this.displayData(data, dates));

这基本上使用combineLatest函数而不是combineLatest运算符(自RxJ 6起不使用)。

仍然有些事情我不太清楚。例如,为什么将from函数与this.loadPosts(user)一起使用?通常fromiterable作为输入并返回一个流,该流按iterable的每个元素发出-loadPosts是否返回iterable

我问这些问题是因为也许可以通过回顾一下链的设计来提高可读性。