Angular 订阅 observable 然后 return 一个新的

Angular subscribe to observable then return a new one

我正在使用 HttpClient get 来自网络服务的数据。我想订阅生成的数据并将其从 JSON 转换为实际的 类,然后从该方法返回 类 中的 Observable。基本上当调用者的 subscribe 触发时,我希望它得到 类.

我对 angular 和可观察对象还很陌生,所以我不确定如何进行链接。所以我想要这样的东西:

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[]

不要马上订阅,但是 pipemap

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

}

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

结合@Antonioss的回答,我想这应该可以解决你的问题:

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

请注意 Observable 中的 map 不同于 Array.map()