Вы должны объединить несколько операторов в 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)
);
Попытайтесь измениться"if 'uploaded' in request.FILES:
"к"if request.FILES
".
Вы могли бы хотеть смотреть на документацию также; существует пример - http://docs.djangoproject.com/en/dev/topics/http/file-uploads/