如何基于一个外部可观察物将多个可观察物结合在一起?

时间:2019-07-23 23:03:10

标签: rxjs

我对RxJ还是很陌生,所以请多多包涵。

我有一个可观察到的对象,它在更改时会发出JSON文档

该文档包含电子邮件地址列表

这些电子邮件地址中的每一个都有与之相关的个人资料,我可以通过可观察的方式对其进行查找

我想结束,当原始文档中的电子邮件地址列表发生更改时,它会发出一组配置文件。

我尝试switchMap()combineLatest()结合使用,但是当电子邮件地址列表为空时,该方法不起作用。作为修复,我引入了对此的检查,然后返回of([])

documentObservable.pipe(
  filter(document =>{
    return hasEmailListChanged(document.emails);
  }),
  switchMap(document => {
    if (!document.emails.length) {
      return of([]);
    }
    const profileObservables = [];
    for (let i = 0; i < document.emails.length; i++) {
      profileObservables[i] = getProfile(document.emails[i])
    }
    return combineLatest(profileObservables);
  })
);

这很好,直到我有多个订阅者可观察。然后,当列表为空时,它突然仅通知第一个订户。我认为这是因为of([])在发出空数组后完成。

另外,我认为在文档可观察的内部创建多个可观察的对象是不好的,最好改用combineAll()之类的东西。

任何帮助深表感谢!

0 个答案:

没有答案