【发布时间】:2021-04-03 09:52:12
【问题描述】:
如何结合distinct、switchMap和mergeMap操作符,使得当source发出重复值时(通过distinct.keySelector检测),取消之前的订阅(如switchMap中),但如果没有重复值则跟随mergeMap 的行为?
例子:
source = from(1, 2, 1, 2, 3) // 'abcde'
result = source.pipe(delay(), combination() // '--cde'
我目前正在做类似的事情:
const activeSubscriptions = new Map();
source$.pipe(
mergeMap((value) => {
const pendingSubscription = activeSubscriptions.get(value);
if (pendingSubscription) {
pendingSubscription.unsubscribe();
activeSubscriptions.delete(value);
}
const request$ = new Subject();
const subscription = this.service.get(value).subscribe({
complete: () => request$.complete(),
error: (err) => request$.error(err),
next: (value) => request$.next(value),
});
activeSubscriptions.set(value, subscription);
return request$;
})
);
但正在寻找更好的方法来做到这一点。
提前谢谢你
【问题讨论】:
标签: rxjs rxjs5 rxjs-observables rxjs-pipeable-operators