Вы должны объединить несколько операторов в pipe
. Используйте switchMap
(или даже mergeMap
), чтобы отобразить вывод вашего магазина в Observable из запроса Http, а затем выполнять другие свои задачи, каждый в своем собственном операторе. Таким образом вы получите намного более чистый код.
Это должно выглядеть примерно так:
updateSettings({ settings }) {
return this.store.select(s => s.settings)
.pipe(
// map the state from your store to the http request
switchMap((state: any) => this.http.put('route/' + state.data.id, { settings })),
// map the http response to the data your care about
map((response: any) => response.data),
// execute any other task with that data
tap(data => this.store.dispatch(new GetSettingsSuccess({ data }))),
// catch errors if they occurr
catchError(this.errorHandlerService.handleError),
);
Затем вы подписываетесь на возвращаемую Observable, и ваш http-запрос будет выполнен после того, как значение из хранилища будет отправлено.
this.settingService.updateSettings({ settings }).subscribe(
// you'll have access to your data from the http response here
data => doSomething(data)
);