我有一个调用服务来获取数据的 Angular 4 组件。不是最奇怪的情况。在我检索数据并需要对其进行转换和过滤之后。显然,如今做到这一点的方法是使用管道。
在我的组件中:
ngOnInit(): void {
this.suService.getShippingUnitTypes().subscribe(res => {
console.log("Getting shipping unit types: ", res);
});
}
在我的服务中:
getShippingUnitTypes(): any {
const convertToJson = map(value => (value as any).json().XXETA_GRID_STATIC_LOV);
const filterShippingUnit = filter(value => (value as any).LOV_TYPE == "SHIPPING_UNIT");
return this.http.get(
this.constantsService.LOOKUP_COLUMN_BATCH_URL
).pipe(convertToJson, filterShippingUnit);
}
该服务导入以下内容:
import { Injectable } from '@angular/core';
import { Http, Response, RequestOptions, Headers, RequestMethod } from '@angular/http';
import { Observable, pipe } from 'rxjs/Rx';
import { map, filter } from 'rxjs/operators';
调试时,代码永远不会出错,只是永远不会到达组件中的 console.log() 语句。如果我删除 .pipe() 并简单地返回 Observable 代码会记录我所期望的内容,而无需进行转换和过滤。
我对 Rxjs 和使用 Pipe 非常陌生。我显然不明白一些事情。
编辑添加信息:
我像这样把水龙头塞进管子里……
pipe(tap(console.log), convertToJson, tap(console.log), filterShippingUnit, tap(console.log))
我不知道水龙头存在,但它很有用。前两个控制台日志给了我我所期望的。第三个,就在 filterShippingUnit 之后,不做任何事情。它根本不记录值。甚至不为空。
在 convertToJson console.log 吐出一个包含 28 个对象的数组之后。其中一个对象是:
{LOV_TYPE: "SHIPPING_UNIT", LOV_TAB_TYP_ITEM: Array(4)}
我希望基于 filterShippingUnit 过滤器传递该对象。