RxJs6 - 静态合并一组可观察对象

RxJs6 - Static merge an array of observables

我有一个用户动态创建的对象列表。每个对象都有一个 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

找到更多信息

我添加了代码,以便您了解我的意思。列表是具有 click$ 属性的对象数组。此数组仅映射到 click$,然后使用 ... 运算符展开。

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