如何将数组的observable转换为数组,或者通过数组的obobservable进行迭代以获得值



所以我想从返回的可观察对象中获得一个id,以便将其用于另一个服务调用。

export class CustomerComponent{
current: Customer;
orders: Observable<Order[]>;
orderitems: Observable<OrderItem[]>;
o: Order[]= [];
orderid: number;

constructor(
private router:Router,
private vs: AccountverificationService,
private os:OrderService, 
private ois:OrderItemService) 
{
this.vs.current.subscribe(x=>this.current=x);
}
ngOnInit() {
this.orders = this.os.getOrders(this.current.id).pipe(
map((orderz:Order[]) => this.o = orderz)
);

this.o.forEach((or: Order) => {
this.orderid = or.id;
})
this.orderitems = this.ois.getOrderItems(this.orderid);  
}
}

我在这里所做的是,我打电话给获取所有订单服务(通过客户id获取订单(。然后,对于每一个订单,我想用它的订单id来调用获取订单项服务。我正在考虑两种选择:

  1. 直接循环通过Observable<Order[]>并提取orderid
  2. Observable<Order[]>转换为数组Order[],并在数组上循环以获得orderid

但是,在我的代码中,我尝试了第二个选项。

我使用了.pipe(map

但它不起作用,orderid仍然未定义。连订单都没有定义!

有什么建议吗?谢谢

今天试过了,还是没用!!!帮助:(

this.orders = this.os.getOrders(this.current.id).pipe(
tap(orderz => {
orderz.forEach((or :Order)=> {
this.orderid = or.id;
});
})
)

我不确定您想要的最终输出是什么。但总的来说:

  • 使用switchMap映射到Observable
  • 使用forkJoin并行执行多个完整的可观测值

要从任何Observable中获取值,您必须订阅。

orders$: Observable<{ orderId: string, orderItems: any[] }>;
ngOnInit() {
this orders$ = this.os.getOrders(this.current.id).pipe(
switchMap((orderz:Order[]) => forkJoin(
// map every order to an observable that emits your required data for that order
orderz.map(o => this.ois.getOrderItems(o.id).pipe(
// e.g. an object containing the order id and the order items for this id
map(orderItems => ({ orderId: o.id, orderItems }))
))
))
)
}
<ng-content *ngIf="orders$ | async as orders">
<div *ngFor="let order of orders">
{{ order | json }}
</div>
</ng-content>

最新更新