Angular6 如何在简单的http调用中使用@ngrx/effects?
我有一个非常简单的http服务:Angular6 如何在简单的http调用中使用@ngrx/effects?,angular6,ngrx,ngrx-effects,Angular6,Ngrx,Ngrx Effects,我有一个非常简单的http服务: import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Observable } from 'rxjs'; import { environment } from '../../environments/environment'; import { JsOrder } from '..
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { environment } from '../../environments/environment';
import { JsOrder } from '../stores/models/order';
@Injectable({
providedIn: 'root'
})
export class OrderService {
private ordersUrl = `${environment.httpApiUrl}/orders`;
constructor(private http: HttpClient) {}
fetchOrders(): Observable<JsOrder[]> {
return this.http.get<JsOrder[]>(this.ordersUrl);
}
}
必须使用
管道
和可管道操作符:
@Effect()
fetchOrders$: Observable<Action> = this.actions$.pipe(
ofType(FETCH_ORDERS),
switchMap(() => {
return this.orderService
.fetchOrders()
.pipe(
map((jsOrders: JsOrder[]) => {
const orders = jsOrders.map(jsOrder =>
Order.create(jsOrder)
);
return new LoadOrders(orders);
}),
catchError(err => of(new LoadOrdersFailure(err)))
)
})
);
@Effect()
fetchOrders$:Observable=此.actions$.pipe(
类型(获取订单),
开关映射(()=>{
返回此文件。orderService
.fetchOrders()
.烟斗(
map((jsOrders:JsOrder[])=>{
const orders=jsOrders.map(jsOrder=>
创建(jsOrder)
);
返回新的装载订单(订单);
}),
catchError(err=>of(new LoadOrdersFailure(err)))
)
})
);
也不要忘记捕捉错误。非常感谢,@timdeschryver。我需要提高我的rxjs技能!您能否告诉语法以将参数传递给服务函数
fetchOrders
??
@Effect()
fetchOrders$: Observable<Action> = this.actions$.pipe(
ofType(FETCH_ORDERS),
switchMap(() => {
return this.orderService
.fetchOrders()
.subscribe((jsOrders: JsOrder[]) => {
return jsOrders.map(jsOrder => Order.create(jsOrder));
})
.map((orders: Order[]) => new LoadOrders(orders));
})
);
@Effect()
fetchOrders$: Observable<Action> = this.actions$.pipe(
ofType(FETCH_ORDERS),
switchMap(() => {
return this.orderService
.fetchOrders()
.pipe(
map((jsOrders: JsOrder[]) => {
const orders = jsOrders.map(jsOrder =>
Order.create(jsOrder)
);
return new LoadOrders(orders);
}),
catchError(err => of(new LoadOrdersFailure(err)))
)
})
);