RxJs6-静态合并一组可观测值



我有一个由用户动态创建的对象列表。每个对象都有一个可观察的click$,我想将所有这些click$流合并到一个流中。

我已经尝试了rxjs导入中的merge静态运算符。直接引用流:

sub = merge(list[0].click$, list[1].click$)
.subscribe(e => { 
console.log('My click event', e); 
})

一切如预期。

但是,当我在订阅下一个调用中使用click$的数组时,我收到了一个Observable对象,而不是我的单击事件。

const streams= [];
list.forEach(o => { streams.push(o.click$); });
sub = merge(streams).subscribe(e => {
console.log(e); // e is an observable ???
});

为什么?我做错了什么?

这里有一个类似的实现,但有相同的错误:https://stackblitz.com/edit/typescript-ohq6rx?file=index.ts&devtoolsheight=100

因为它是一个数组。您可以使用JavaScript中的...运算符来展开数组。如果你这样做,一切都会很好。

更多信息可在MDN 上找到

我添加了代码,这样你就知道我的意思了。List是具有click$属性的对象的数组。该阵列仅映射到CCD_ 9,然后用CCD_。

sub = merge(...list.map(item => item.click$)).subscribe(console.log)

最新更新