【问题标题】:How to iterate the List inside the pipe in RXJS如何在 RXJS 中迭代管道内的列表
【发布时间】:2020-06-23 13:12:43
【问题描述】:

我有一个变量,它是一个列表

this.formListModel = [studentData1,studentData2,studentData3]

现在我必须迭代上面列表中的每个学生数据,并且需要传入一个方法,该方法将通过 API 将这些数据发送到后端

所以这里是小代码

 1. this.odataNotificationService.cancelNotification(this.model)
 2.            .pipe(
 3.                tap(() => {
 4.                    someFunctionality..
 5.                    someFunctionality..
 6.                }),
 7.                flatMap(() => this.someFunctionWhichReturnsObservable()),
 8.                flatMap(() =>  this.someSecondFunctionWhichReturnsObservable()),
 9.                flatMap(() => this.formListModel.map(()=>{
                                      return this.thirdFunctionWhichReturnsObservable(form.identifier)
                                   }))

现在我在第 9 行和第 10 行遇到了问题

在这里,我有一个存储在变量this.formListModel 中的列表,我需要在其中迭代数据并需要发送 下一个函数this.thirdFunctionWhichReturnsObservable(form)

我在 flatMap 中使用了一个永远无法工作的地图。 所以我正在寻找一个可以在管道内迭代的解决方案

【问题讨论】:

    标签: angular rxjs angular8 rxjs6 flatmap


    【解决方案1】:

    我会这样做:

    9.) flatMap(() => combineLatest(...this.formListModel.map(form => this.thirdFunctionWhichReturnsObservable(form.identifier))),
    

    您可能需要将flatMap 切换为switchMap,我不确定这个。您也可以使用forkJoin 代替combineLatest。这是给你实验的。如果您需要按顺序发送请求,我不知道该怎么做。

    【讨论】:

      【解决方案2】:

      此解决方案使用from 创建运算符为this.formListModel 中的每个元素发出一个可观察的值。在 mergeMap 内部订阅了 observable,并返回了 this.thirdFunctionWhichReturnsObservable 的 observable 结果。 当外部流 from(this.formListModel) 完成 toArray() 运算符时,会捆绑来自 this.thirdFunctionWhichReturnsObservable 的所有结果并发出一个数组。

      您可能需要根据需要调整此解决方案。我希望它有所帮助。 将第 9 行替换为:

          switchMap(() => from(this.formListModel)),
          concatMap(identifier => this.thirdFunctionWhichReturnsObservable(form[identifier])),
          toArray()
      
      

      我使用mergeMap假设顺序,this.thirdFunctionWhichReturnsObservable的结果在事务中返回。如果没有,则使用mergeMap。

      您可以在此处阅读有关 rxjs 扁平化运算符的信息:

      【讨论】:

        猜你喜欢
        • 2021-12-12
        • 1970-01-01
        • 2011-09-05
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        相关资源
        最近更新 更多