Звучит так, как будто вы можете использовать оператор forkJoin
здесь ( Когда все наблюдаемые завершены, выведите последнее испущенное значение из каждого. ).Из документации:
Зачем использовать forkJoin?
Этот оператор лучше всего использовать, когда у вас есть группа наблюдаемых и вы заботитесь только о конечном полученном значениикаждый.Один из распространенных вариантов использования этого - это если вы хотите отправить несколько запросов при загрузке страницы (или каком-либо другом событии) и хотите действовать только тогда, когда ответ получен для всех.Таким образом, это похоже на то, как вы могли бы использовать Promise.all
.
. Имейте в виду, что если какая-либо из внутренних наблюдаемых, предоставленная для forkJoin
, ошибочна, вы потеряете значение любых других наблюдаемых, которые бы или уже имелизавершено, если вы не catch
правильно ошиблись на внутренней наблюдаемой.Если вас интересует только то, как все внутренние наблюдаемые завершаются успешно, вы можете заметить ошибку снаружи.
Стоит также отметить, что если у вас есть наблюдаемое, которое испускает более одного элемента, и вы обеспокоены предыдущимВыбросы forkJoin
не правильный выбор.В этих случаях вам лучше воспользоваться оператором, например combineLatest
или zip
.
. Чтобы использовать его, вы можете использовать следующий код для приведенного выше примера.
forkJoin(
this.actions.pipe(ofType(METADATA_SUCCESS_ACTION_1), take(1)),
this.actions.pipe(ofType(SUCCESS_ACTION_2), take(1))
).subscribe(([data1, data2]) => {
console.log(data1);
console.log(data2);
})