Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在RXJS中迭代管道内的列表_Angular_Rxjs_Angular8_Rxjs6_Flatmap - Fatal编程技术网

Angular 如何在RXJS中迭代管道内的列表

Angular 如何在RXJS中迭代管道内的列表,angular,rxjs,angular8,rxjs6,flatmap,Angular,Rxjs,Angular8,Rxjs6,Flatmap,我有一个变量,它是一个列表 this.formListModel=[studentData1、studentData2、studentData3] 现在我必须迭代上面列表中的每个学生数据,并需要传入一个方法,该方法将通过API将这些数据发送到后端 下面是小代码 1. this.odataNotificationService.cancelNotification(this.model) 2. .pipe( 3. tap(() =>

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

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.third函数,该函数返回可维护(表单)

我在flatMap中使用了一个地图,它永远不会工作。
因此,我正在寻找一种可以在管道内部迭代的解决方案,我会这样做:

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

您可能需要将
flatMap
切换到
switchMap
,我不确定这一个。您还可以使用
forkJoin
而不是
combinelateest
。这是你的实验。如果您需要按顺序发送请求,我不确定如何发送。

我会这样做:

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

您可能需要将
flatMap
切换到
switchMap
,我不确定这一个。您还可以使用
forkJoin
而不是
combinelateest
。这是你的实验。如果您需要按顺序发送请求,我不知道该怎么做。

此解决方案使用
from
creational操作符为
此.formListModel
中的每个元素发出一个可观察的值。在
mergeMap
内部订阅了可观察的对象,并返回了
此.third函数的可观察结果,其中返回了可观察的
。
当来自(this.formListModel)的外部流
完成
toArray()
时,操作符绑定来自
此.thirdFunction的所有结果,该.thirdFunction可恢复
,并发出一个数组

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

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

我使用了
mergeMap
,假设this.third函数的顺序、结果都会在matters中返回,而该函数返回的是可维护的
。如果没有,则使用mergeMap

您可以在此处阅读rxjs展平操作符:


此解决方案使用来自
creational运算符的
为该.formListModel
中的每个元素发出一个可观察的值。在
mergeMap
内部订阅了可观察的对象,并返回了
此.third函数的可观察结果,其中返回了可观察的
。
当来自(this.formListModel)的外部流
完成
toArray()
时,操作符绑定来自
此.thirdFunction的所有结果,该.thirdFunction可恢复
,并发出一个数组

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

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

我使用了
mergeMap
,假设this.third函数的顺序、结果都会在matters中返回,而该函数返回的是可维护的
。如果没有,则使用mergeMap

您可以在此处阅读rxjs展平操作符: