【发布时间】:2019-07-08 12:55:17
【问题描述】:
我认为我在这里遗漏了一些东西,因为我发现将 Angular http.get 与来自 RXJS 的 pipe(map) 一起使用非常不直观:
后端返回一个简单对象数组(参见下面的Unifiedparams接口)。我想提取一个Observable<String[]> 并将其传递给app.component.html,在此我使用*ngFor="let param of params$ | async" 构建一个下拉列表。
虽然返回的 json 是一维数组,但我似乎无法在没有嵌套映射的情况下访问 name 属性。
fetchParams(): Observable<String[]>{
const result = this.http.get<unifiedParam[]>('http://localhost:5000/getparams');
const params:Observable<String[]> = result.pipe(map(unifiedParams => res.map(unifiedParam=>unifiedParam.name)));
return params;
}
这似乎表明 Observable 本身就是一个数组,但分别使用 this.http.get<unifiedParam> 和 rows:Observable<String> 会导致 rows 为空:
fetchParams(): Observable<String>{
const result = this.http.get<unifiedParam>('http://localhost:5000/getparams');
const params:Observable<String> = result.pipe(map(unifiedParam=> unifiedParam.name)));
params.pipe(tap(console.log)); //doesn't print anything
return params;
}
所以我的问题是,如果使用Observable<UnifiedParam[]> 和.pipe(map(res=>map(el=>el.name) 是要走的路。
谢谢!
更新:忘记界面了:)
接口统一参数 { 名称:字符串, 来源:字符串 };
更新 2:澄清令我困惑的地方: 为什么我需要外部 map() 函数。 map() 不是为数组定义的吗?
【问题讨论】:
-
Unifiedparams的接口在哪里?
-
@robert1 抱歉忘记添加了
-
答案已更新,以进一步解释为什么 2 地图功能和差异。希望对您有所帮助。
-
params.pipe(tap(console.log));不工作,因为你没有订阅它,你必须改变它:return params.pipe(tap(console.log))
标签: angular rxjs pipe observable