调用订阅中的订阅,rxjs,角度

时间:2018-11-22 20:00:32

标签: angular rxjs

我知道在subsribe内还有其他一些用于调用订阅的帖子,但是我找不到解决方法。

我在内部调用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)
                 }
               )
             }
           ) 
      })

2 个答案:

答案 0 :(得分:1)

有多种方法可以执行此操作,但是如果您想要的状态实际上是一个数组,则可以先解压缩该数组(使用concatAll / mergeAll),然后在其上调用concatMap每个州。 concatMap运算符将为每个项目运行,并等待其完成:

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

答案 1 :(得分:0)

您可以在此处使用mergeMap / mergeAll运算符

getStatesAndCountry(countryID) {
    let states = GetStates(countryID);
    return states.pipe(
      mergeMap(map(state) => GetHeadOfState(state.ID))
    )
}

this.getStatesAndCountry(countryId).subscribe(
  value =>  console.log(val)
)