Rxjs:在发射后从多个可观察量中获取最新值

标签 rxjs rxjs6 rxjs-pipeable-operators

我有多个可观察对象在页面的生命周期内发出值。例如:

chartData$: Observable;
tableData$: Observable;
filterData$: Observable;

用户可以随时单击“下载”按钮,并获取结合了这些可观察量中的每一个最后发出的值的 JSON:

downloadButtonClicked$.pipe(
    combine chartData$, tableData$ and filterData$    // <- how do I get latest values here?
).subscribe(([chart, table, filter]) => downloadJson(chart, table, filter))

但是当这 3 个可观察对象中的任何一个作为页面生命周期的一部分发出值时,不应调用 downloadJson 函数,仅在下载点击时调用。

TLDR;

工作最优雅的解决方案(由迈克建议) https://stackblitz.com/edit/typescript-jm3zma?file=index.ts

最佳答案

你可以这样做:

combineLatest([chartData$, tableData$, filterData$]).pipe(
  switchMap(result => downloadButtonClicked$.pipe(map(() => result)))
).subscribe(([chart, table, filter]) => {
  downloadJson(chart, table, filter);
});

每当 chartData$tableData$filterData$ 发出新值时,它都会创建一个新的内部订阅 downloadButtonClicked $ 向下传递新数据。

注意:在所有 chartData$tableData$filterData$ 发出它们的第一个值之前,不会创建订阅。如果您需要下载在这种情况下仍然触发,那么您可以使用 defaultIfEmpty

关于Rxjs:在发射后从多个可观察量中获取最新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63795528/

相关文章:

rxjs - 无法从Interceptor订阅数据

angular - 如何理解复杂的 TypeScript 泛型类型?

javascript - 如何使用 rxjs 的 sum 运算符?

rxjs - 如何将 Fetch API 响应转换为 RxJS Observable?

angular - Observable 因错误而关闭

Angular 5 订阅和取消订阅 Observable

javascript - 如果我在调用异步函数后调用它,为什么我的 Observer 订阅者没有运行?

angular - 如何在rxjs6中注册路由监听并更改标题?

javascript - 使用共享、 map 和过滤器时,Angular rxjs 数据无法正确更新

angular - rxjs - Angular : How to wait for an Observable function, 调用另一个返回 Observable 的函数?