angular - 如何在其中一个流依赖于另一个流的情况下使用 combineLatest?

标签 angular typescript rxjs combinelatest

我有一个从后端获取数据的 Angular 解析器。我有以下调用要执行:

GetProject(projectId): Observable<IProject>
GetSites(projectId): Observable<ISites[]>
GetPersons(siteId): Observable<IPerson[]>

我正在尝试使用 combineLatest 但不确定如何在我的场景中使用 RxJs。我希望所有请求在解析之前完成,但 GetPersons() 应该将 GetSites() 结果中第一项的 ID 作为输入。这是怎么做到的?

最佳答案

它看起来更像是你只想连接几个调用:

forkJoin([GetProject(projectId), GetSites(projectId)]).pipe(
  concatMap(([project, sites]) => {
    const siteId = /* whatever here */;
    return GetPersons(siteId);
  }),
).subscribe(...);

这还取决于您是想在观察者中接收所有响应还是仅接收最后一个响应。如果您想要所有回复,那么您需要将 GetPersonsmap 链接起来,并附加前两个回复:

GetPersons(siteId).pipe(
  map(persons => [project, sites, persons]),
)

关于angular - 如何在其中一个流依赖于另一个流的情况下使用 combineLatest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58183708/

相关文章:

angular - 如何将 ionic 搜索栏集中在按钮单击上

javascript - 用另一个指令包装 Angular 2+ 指令

javascript - Bacon.js (FRP) - 从数组中添加/删除值并保存在存储中

javascript - Angular 2 ES6/7 Eventemitter 更新其他组件

javascript - 我的 mapTo 语句有什么问题

带笔划的 Angular 2 圆形 svg

javascript - Angular 2使功能在ng-content中可用

typescript - 在完整的上下文中引用装饰类方法

Angular Universal 在 Google 页面速度洞察上没有按预期提供性能改进

angular - 属性绑定(bind)连接字符串 Angular