Существует много способов работы с RxJS, и без конкретного примера здесь сложно дать вам конкретный ответ. Лучшее, что я могу сделать, это предоставить вам пример из моего кода и надеяться, что он близок к тому, что вы пытаетесь достичь.
У меня есть товары с их поставщиками. Когда я получаю продукт, у него есть массив идентификаторов поставщиков. Поэтому мне нужно получить продукт, а затем найти поставщиков в рамках этой операции. (Звучит похоже на ваш сценарий?)
Вот мой код:
selectedProductSuppliers$ = this.selectedProduct$
.pipe(
filter(selectedProduct => Boolean(selectedProduct)),
switchMap(selectedProduct =>
forkJoin(selectedProduct.supplierIds.map(supplierId => this.http.get<Supplier>(`${this.suppliersUrl}/${supplierId}`)))
),
tap(suppliers => console.log('product suppliers', JSON.stringify(suppliers)))
);
Этот код использует switchMap
, чтобы гарантировать, что если пользователь нажимает несколько раз, он переключится на последнююselection.
Затем он использует forkJoin
для обработки каждого идентификатора поставщика, отправляя запрос http get для получения данных каждого поставщика и объединения их в один передаваемый массив.
Возвращаемое значениеObservable<Supplier[]>
Вы можете найти полный пример здесь: https://github.com/DeborahK/Angular-RxJS
ОБНОВЛЕНИЕ:
Если вы измените код выше, чтобы использовать concatMap
вместо switchMap
он будет обрабатывать каждый запрос, ожидая, пока он не завершится, перед выполнением следующего.
![enter image description here](https://i.stack.imgur.com/VylS7.png)
![enter image description here](https://i.stack.imgur.com/WRSIm.png)