取消mergeMap中的重复订阅

问题描述

如何组合distinct、switchMap和mergeMap操作符,这样当源发出重复值时(由distinct.keySelector检测),取消之前的订阅(如switchMap中),但如果值不重复,则跟随mergeMap 的行为?

示例:

source = from(1,2,1,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$;
  })
);

但正在寻找更好的方法来做到这一点。

提前致谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)