Angular订阅observable然后返回一个新的

时间:2018-06-13 16:49:26

标签: angular angular-observable

我正在将HttpClient用于来自Web服务的get数据。我想订阅结果数据并将其从JSON转换为实际的类,然后从该方法返回这些类的Observable。基本上当调用者的subscribe触发时,我希望它能够获得类。

我对角度和可观察性很新,所以我不确定如何进行链接。所以我想要这样的东西:

constructor(private http: HttpClient) {}

getExistingArsByLab(labId: number) : Observable<EhsAssessmentAr[]> {
    return this.http.get("...")
        .subscribe(json => json.map(obj => {
            let ar = new EhsAssessmentAr();
            ar.id = obj['id'];
            ...
            return ar;
    }));
}

当然实际上并没有编译,然后调用者会这样做:

this.getExistingArsByLab(12).subscribe(ars => { ... });

此时我将ars作为实际的EhsAssessmentAr[]

2 个答案:

答案 0 :(得分:2)

结合@Antoniosss答案,我认为这应该可以解决您的问题:

getExistingArsByLab(labId: number) : Observable<EhsAssessmentAr[]> {
 return this.http.get("...")
    .pipe(map(obj =>  {
        return obj.map(element => {
           let ar = new EhsAssessmentAr();
           ar.id = element['id'];
           ...
           return ar;
        });
 }));
}

请注意map中的ObservableArray.map()

不同

答案 1 :(得分:-1)

不要立即订阅pipemap

getExistingArsByLab(labId: number) : Observable<EhsAssessmentAr[]> {
    return this.http.get("...")
        .pipe(map(obj =>  {
            let ar = new EhsAssessmentAr();
            ar.id = obj['id'];
            ...
            return ar;
    }));

}

您必须修复括号并添加正确的映射。