【问题标题】:Calling subscribe in subscribe, rxjs, angular在 subscribe、rxjs、angular 中调用 subscribe
【发布时间】:2018-11-22 20:00:31
【问题描述】:

我知道在订阅中调用 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)
                 }
               )
             }
           ) 
      })

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以在此处使用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)
      )
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-14
      • 2017-03-03
      • 2020-11-16
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      相关资源
      最近更新 更多