Я гарантирую вам, что это правильный способ сделать это.Откуда мне знать?Об этом конкретном вопросе на курсе ngrx Udemy идет длинный разговор, и это решение, которое они предлагают.Обратите внимание, что крайне важно использовать catchError
, иначе ответ об ошибке HTTP (любой ответ, отличный от 2xx) отключит этот эффект.
@Effect()
loadDocsEffect$ = this.actions$.pipe(
ofType(myActionTypes.LoadDocs),
mergeMap((action) => {
// essential to catchError else an HTTP error response will disable this effect
return this.myService.getDocs().pipe(
map(data => new LoadDocsSuccess(data)),
catchError((err) => {
return of(null)
})
)
}),
tap(res => console.log(res)) // you won't want this line but useful for debugging
);
В этом примере, если запрос HTTP завершается успешно, результат new LoadDocsSuccess(data)
будет зарегистрирован внутри крана.В случае сбоя HTTP-запроса, null
будет зарегистрирован внутри крана.Конечно, вы можете захотеть предоставить другую логику catchError, но вы поняли идею.