我至少有两个按钮想要动态监听点击。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 ×1