Я борюсь с отправкой действия после завершения предыдущего.
Что я хочу сделать, это отправить действие (скажем, getDetails), а затем использовать данные, поступающие из этого действия, для отправки другого действия (скажем, getUserLists). Затем, когда это последнее действие завершится, я хочу перейти к маршруту.
Я не уверен, как связать эти действия. Это то, что я попробовал прямо на моем компоненте (я слышал, что этот вид логики c должен быть внутри эффекта, поэтому моя цель здесь только показать, что я сделал):
this.store.dispatch(DetailsActions.getDetails({ bt: '00079138' }));
this.store.select(fromApp.selectDetails)
.pipe(
// which operator I have to use here???
tap((clientId) => this.store.dispatch(ProfileActions.getUsersList({ clientId })),
first()
)
.subscribe(() => this.router.navigate(['tabs/home'], { replaceUrl: true }));
Это так? исправить подход, который я выбрал? Есть несколько рекомендаций?
Заранее спасибо.
ОБНОВЛЕНИЕ Попробовал решение @calimoose, реализовав новое действие, которое выполняет следующие действия :
this.actions$.pipe(
ofType(ProfileActions.populateApiInfo),
flatMap((data) => of(DetailsActions.getDetails({ bt: data.bt }))),
withLatestFrom(this.store.select(fromApp.selectClientId)),
flatMap(([_, clientId]) => of(ProfileActions.getUsersList({ clientId }))),
withLatestFrom(this.store.select(fromApp.selectPbList)),
map(([_, pbList]) => {
return ProfileActions.populateApiInfoSuccess();
})
));
Но, похоже, он не отправляет действия getDetails и getUsersList. Что-то не так в цепочке операторов?
ОБНОВЛЕНИЕ 2 Пробовал, как предлагал @Friso, но действия getDetails и getUsersList не отправляются
this.actions$.pipe(
ofType(ProfileActions.populateApiInfo),
concatMap((data) =>
of(DetailsActions.getDetails({ bt: data.bt }))
.pipe(
withLatestFrom(this.store.select(fromApp.selectClientId)),
concatMap(([_, clientId]) =>
of(ProfileActions.getUsersList({ clientId }))
.pipe(
withLatestFrom(this.store.select(fromApp.selectPbList)),
map(([_, pbList]) => {
return ProfileActions.populateApiInfoSuccess();
})
)
),
)
)
));