Communicating with a Remote Server via HTTP presents an extra level of complexity as there is an increased chance of race conditions and the need for error handling. There is also the tricky problem of how to handle the user experience as the application is trying to complete the remote request. NX Data Persistence is a library that works with ngrx effects to give us a better way to handle Remote Server calls as well as improving on the overall shape of the effect itself. In this lesson,we are going to convert our stock effects to use NX Data Persistence and the advantages of doing so by using fetch
, optimisticUpdate
,and pessimisticUpdate
. We will also see how it gives us a neat division in our effect to handle the sequence we want to run as well as any errors that should arise in the process.
Install:
npm i --save @nrwl/nx
app.module.ts:
imports: [
...
NxModule.forRoot(),...
],
effect:
import { Injectable } from ‘@angular/core‘; import {Effect} from ‘@ngrx/effects‘; import { DataPersistence } from ‘@nrwl/nx‘; import {Action} from ‘@ngrx/store‘; import { RolesService } from ‘../services/roles.service‘; import { Observable } from ‘rxjs‘; import { switchMap,map } from ‘rxjs/operators‘; import * as actions from ‘../actions‘; import { Role } from ‘../models‘; import { DashbaordState } from ‘../reducers‘; @Injectable() export class RolesEffects { constructor( private rolesService: RolesService,private dataPersistence: DataPersistence<DashbaordState> ) { } @Effect() loadRoles$: Observable<Action> = this.dataPersistence.fetch( actions.RolesActionTypes.LoadRoles,{ run: (action: actions.LoadRoles) => { return this.rolesService.roles.pipe( map((roles: Role[]) => new actions.LoadRolesSuccess(roles)) ); },onError: (action: actions.LoadRoles,error) => { console.error(‘Error‘,action,error); } } ); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。