我对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);
}
答案 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)
一起使用?通常from
以iterable
作为输入并返回一个流,该流按iterable
的每个元素发出-loadPosts
是否返回iterable
?
我问这些问题是因为也许可以通过回顾一下链的设计来提高可读性。