Angular подписывайся на наблюдаемый потом возвращай новый

Я использую HttpClient для 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 ответа

Решение

В сочетании с ответом @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 от Observable отличается от Array.map()

Не подписывайтесь сразу, но pipe а также map

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

}

Вы должны исправить скобки и добавить правильное отображение.

Другие вопросы по тегам