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

时间:2018-11-21 15:51:42

标签: javascript reactive-programming rxjs6

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

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

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

1 个答案:

答案 0 :(得分:1)

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

更多信息,请访问MDN

我添加了代码,因此您对我的意思有所了解。列表是具有click$属性的对象的数组。该数组仅映射到click$,然后通过...运算符进行传播。

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