rxjs map参数是整个数组

时间:2018-03-07 21:49:21

标签: angular typescript rxjs observable

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数组,以便我可以处理这些元素?

2 个答案:

答案 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的需要,也许这就是你想要实现的但是如果我错了就告诉我,我会相应更新:

live example

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);
    })