小编Mic*_*son的帖子

switchMap内部动态数组的CombineLatest不断取消订阅和重新订阅

我至少有两个按钮想要动态监听点击。listeningArray$将发出一个ar我需要监听的按钮 # 的数组 ( )。当有人单击我正在收听的这些按钮之一时,我需要控制台记录所单击的按钮,并记录某个时间间隔的值。

如果ar从 到[1,2][1]我们需要停止监听按钮 #2 的点击。因此,需要删除 DOM 单击事件2,这应该会触发.finally()操作符。但是对于1,我们应该保持订阅状态,并且 中的代码.finally()不应该运行,因为没有任何内容被取消订阅。

const obj$ = {};

Rx.Observable.combineLatest(
  Rx.Observable.interval(2000),
  listeningArray$ // Will randomly emit either [1] or [1,2]
)
.switchMap(([x, ar]) => {
    const observables = [];

    ar.forEach(n => {
        let nEl = document.getElementById('el'+n);

        obj$[n] = obj$[n] || Rx.Observable.fromEvent(nEl, 'click')
          .map(()=>{
            console.log(' el' + n);
          })
          .finally(() => {
            console.log(' FINALLY_' + n); …
Run Code Online (Sandbox Code Playgroud)

rxjs

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

rxjs ×1