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