首页 > 解决方案 > 在 subscribe、rxjs、angular 中调用 subscribe

问题描述

我知道在订阅中调用订阅的其他帖子很少,但我找不到解决方案。

我在 subscribe 中调用 subscribe ,我知道它不能正常工作。console.log 以随机顺序打印head。例如,S1 有 H1,S2 有 H2,S3 有 H3。当前程序有时会打印 S1、S3、S2,有时会打印 S2、S3、S1。

期望是按顺序打印国家元首。我怎样才能实现它?

 GetStates(countryID).subscribe(
      data => {
           let states = JSON.parse(data);
            states.forEach(
             entry => {
               GetHeadOfState(entry.ID).subscribe(
                 head => {
                   console.log(head)
                 }
               )
             }
           ) 
      })

标签: angularrxjs

解决方案


有多种方法可以做到这一点,但如果您想要的状态实际上是一个数组,您可以首先解包数组(使用concatAll/ mergeAll),然后调用concatMap每个状态。操作员将为每个concatMap项目运行并等待它完成:

GetStates(countryID).pipe(
  map(data => JSON.parse(data)),
  concatAll(),
  concatMap(state => GetHeadOfState(state.ID)),
).subscribe(headOfState => ...);

推荐阅读