我有一个从对Observable对象的rest api调用中检索到的资源列表。 这些资源可以具有以下值:
{名称:“法语”,Uri:“ file:/// C:... / french.csv”}, {名称:“ DB2”,Dbms:“ DB2”,主机:“ ...”,端口:50000,DbName:“ ...”}
我需要基于Dbms值确定资源是数据库资源还是文件资源,以便稍后在表的“类型”列中显示并能够对其进行过滤...
我认为地图是最好的选择,但仍然无法弄清楚究竟是什么:
getResources(user): Observable<Array<any>> {
const url = this.url + this.apiAllowedPath + user + '/resources';
return this.http.get(url)
.flatMap((response) => response.json())
.map( (response) => response.Dbms ? "DB : File/Folder"; )
.catch((response: Response) => this.errorHandler(response) );
}
答案 0 :(得分:0)
使用了地图运算符后,结果是字符串值DB
或File/Folder
所以您没有实际的服务器响应;
您可以这样做
interface DataResponse{
db:any[];
file:any[];
}
getResources(user): Observable<DataResponse> {
const url = this.url + this.apiAllowedPath + user + '/resources';
return this.http.get(url)
.flatMap((response) => response.json())
.map( (response) =>{
let db = response.filter(i => response.hasOwnProperty('Dbms') );
let file = response.filter(i =>!response.hasOwnProperty('Dbms'));
return {db,file}
})
.catch((response: Response) => this.errorHandler(response) );
}
答案 1 :(得分:0)
这将创建一个数组,其中每个对象都具有显示其源类型的type
属性。
getResources(user): Observable<Array<any>> {
const url = this.url + this.apiAllowedPath + user + '/resources';
return this.http.get(url)
.map(response => response.json())
.map(data => data.map(o => ({
...o,
type: o.Dbms ? 'DB' : 'FILE',
path: Uri.parse(o.Uri).fsPath
})))
.catch((response: Response) => this.errorHandler(response) );
}