【发布时间】:2019-10-11 07:54:24
【问题描述】:
我的服务上有一个获取所有模板的方法,并返回一个可观察的模板对象数组。我正在尝试向我的服务添加一个新方法,该方法获取模板数组,但对其进行过滤以在数组中按名称获取特定模板。
有没有办法让它只返回一个模板 Observable,而不是一个带有一个项目的 Observable Template 数组?我对 rxjs 语法还很陌生,以至于我不明白如何使用 reduce 之类的东西。
这是我获取所有模板的工作方法。
getAllTemplates(): Observable<Template[]>{
const uri = this.baseService.rootTemplatesUri;
return this.http.get<Template[]>(uri)
.pipe(
catchError((error: HttpErrorResponse) => { return throwError(error); })
);
}
这是我按名称过滤的尝试,如果有匹配的名称,它将返回一个包含一个元素的数组:
getTemplateByName(name:string):Observable<Template[]>{
const uri = this.baseService.rootTemplatesUri;
return this.http.get<Template[]>(uri)
.pipe(
map(templates => {
return templates.filter(template => {
return template.Name === name;
})
}),
catchError((error: HttpErrorResponse) => { return throwError(error); })
);
}
有没有办法通过过滤返回单个 Observable?
【问题讨论】:
-
一个选项可以在 rxjs 中使用
reduce运算符,接收数组并返回单个对象 -
我应该把reduce放在哪里?
-
使用
find而不是filter。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
@JenniferS in
pipe
标签: javascript arrays angular filter rxjs