Я определил эффект, который вызывает API, который удаляет файл с определенным uuid на сервере:
@Effect()
deleteFileImport$: Observable<Action> = this.actions$.pipe(
ofType(actions.runs.DELETE_FILE_IMPORT),
map((action: any) => action.payload),
switchMap((fileImport: FileImport) =>
this.rest.del(fileImportUrl + fileImport.uuid + '/').pipe(
map((response: FileImport) => new actions.runs.DeleteFileImportSuccess(response)),
catchError((err: HttpErrorResponse) => {
console.info('DELETE_FILE_IMPORT error', err);
return observableOf(new NotificationAction({
title: 'File Import Delete Failed',
body: 'Failed to delete file import: ' + fileImport.filename
})
);
})
)
)
);
если я вызову этот эффект в цикле:
importFilesToDelete.forEach(file => {
this.store.dispatch(new actions.runs.DeleteFileImport(file));
});
удаляется только первый. Если я отслеживаю вызовы для отправки, я вижу, что все файлы обрабатываются с переданными правильными параметрами, но выполняется только первое действие. Я что-то упустил в работе ngrx? Можете ли вы отправлять действия в цикле?
Попробуйте использовать
concatMap
илиmergeMap
вместоswitchMap
в эффекте.