public observableA = (id: string): Observable<Array<any>>=>{
}
public observableB = (id: string): Observable<Array<myClass>>=>{
observableA(metroId).map((x)=>{
return new myClass(
x.FacilityName,
x.ID)
};
}
export class myClass{
ID: string;
Name: string;
constructor(id: string, name: string){this.ID=id;this.Name=name;}
}
ObservableA返回一个对象数组,我编写一个函数ObservableB,使用返回的ObservableA数组返回一个myClass数组。
当我调试此代码时, 我能看到的是&#39; x&#39;在map参数中是来自ObservableA的整个数组,而不是数组的对象元素。
因此无法访问属性。
可能出现什么问题?
更新: 有没有办法让单个Observable of Array成为一个Observable数组,以便我可以处理这些元素?
答案 0 :(得分:3)
我认为你误解了观察者的工作方式。
你正在获得整个数组,因为它是observable正在使用的内容。它是Observable<Array<any>>
,因此map
运算符将获得Array<any>
。如果你想一次处理一个对象,你的observable应该是Observable<any>
类型(或更好,使用类似Observable<TestClass>
的具体类)
您可以使用Observable<T>
从Array<T>
创建from
,请参阅此页面:
http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-from
我不知道如何将这个适用于您,因为您没有发布observableA
的工作方式。
这是我学习RxJs时使用的一些资源:
答案 1 :(得分:0)
我没有看到第二个Observable的需要,也许这就是你想要实现的但是如果我错了就告诉我,我会相应更新:
import { Observable } from 'rxjs/Observable';
import { async } from 'rxjs/scheduler/async';
import { from } from 'rxjs/observable/from';
import { map } from 'rxjs/operators';
const metroId: string = "IamAnId";
const arry: Array<myClass> = [];
const observableA: (id: string) => Observable<any> = (id: string) => {
// use your id whatever you want
return from([
{
FacilityName: 'name',
ID: 'IamAnotherId'
},
{
FacilityName: 'AnotherName',
ID: 'AlsoHere'
}
], asyn);
}
observableA(metroId)
.pipe(map(x => {
return new myClass(
x.FacilityName,
x.ID)
}))
.subscribe(itemClass => {
arry.push(itemClass);
})