eag*_*gor 3 rxjs rxjs-pipeable-operators rxjs6
我有多个在页面生命周期内发出值的可观察对象。例如:
chartData$: Observable;
tableData$: Observable;
filterData$: Observable;
Run Code Online (Sandbox Code Playgroud)
用户可以随时单击“下载”按钮,并获取结合了每个可观察量最后发出的值的 JSON:
downloadButtonClicked$.pipe(
combine chartData$, tableData$ and filterData$ // <- how do I get latest values here?
).subscribe(([chart, table, filter]) => downloadJson(chart, table, filter))
Run Code Online (Sandbox Code Playgroud)
但是,downloadJson当这 3 个可观察量中的任何一个在页面生命周期中发出值时,不应调用该函数,仅在单击“下载”时调用。
太长了;
工作最优雅的解决方案(如迈克建议) 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);
});
Run Code Online (Sandbox Code Playgroud)
每当chartData$、tableData$或filterData$发出新值时,它都会创建一个新的内部订阅来downloadButtonClicked$传递新数据。
chartData$注意:在所有、 、tableData$和filterData$发出其第一个值之前,不会创建订阅。如果您需要在这种情况下仍然触发下载,那么您可以使用defaultIfEmpty.
| 归档时间: |
|
| 查看次数: |
5779 次 |
| 最近记录: |