Как перебрать список внутри канала в RXJS - PullRequest
0 голосов
/ 11 марта 2020

У меня есть переменная, которая является списком

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, где мне нужно перебрать данные и отправить в функцию Next this.thirdFunctionWhichReturnsObservable(form)

Я использовал карту внутри flatMap, которая никогда не будет работать. Поэтому я ищу решение, в котором я мог бы выполнять итерации внутри трубы

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Я бы сделал что-то вроде этого:

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

Возможно, вам придется переключить flatMap на switchMap, я не уверен в этом. Вы также можете использовать forkJoin вместо combineLatest. Это для вас, чтобы экспериментировать. Если вам нужно отправить запросы последовательно, я не уверен, как это сделать.

0 голосов
/ 01 апреля 2020

Это решение генерирует наблюдаемое для каждого элемента внутри this.formListModel с помощью оператора создания from. Внутри mergeMap наблюдаемая подписывается, и возвращается наблюдаемый результат this.thirdFunctionWhichReturnsObservable. Когда внешний поток from(this.formListModel) завершает оператор toArray(), он объединяет все результаты из this.thirdFunctionWhichReturnsObservable и создает массив.

Возможно, вам придется настроить это решение в соответствии с вашими потребностями. Я надеюсь, что это помогает. Замените строку 9 на:

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

Я использовал mergeMap, предполагая, что порядок, результаты this.thirdFunctionWhichReturnsObservable возвращаются в вопросах. Если это не так, используйте mergeMap.

Вы можете прочитать об операторах сплющивания rx js здесь:

...