在Angular中,我们可以使用RxJS中的Observable来处理返回数据。下面是一个示例,展示了如何在一个服务中,根据另一个服务的结果来修改数据并返回一个可观察对象:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { MyDataService } from './my-data.service';
export interface MyObject {
id: number;
name: string;
data: any[];
}
@Injectable()
export class MyOtherService {
constructor(private dataService: MyDataService) {}
public getMyObjects(): Observable {
return this.dataService.getData().pipe(
switchMap((data: any[]) => {
const modifiedData = this.modifyData(data);
return of(modifiedData);
})
);
}
private modifyData(data: any[]): MyObject[] {
// modify data here based on the other service's results
const myObjects: MyObject[] = data.map((item: any) => ({
id: item.id,
name: item.name,
data: item.data.map((element: any) => ({ id: element.id, name: element.name }))
}));
return myObjects;
}
}
在这个示例中,我们首先注入了另一个服务MyDataService
。然后,在getMyObjects
方法中,我们使用pipe
方法和switchMap
操作符来等待dataService.getData()
方法返回数据。然后我们将这个数据传递给modifyData
方法,并返回一个经过修改的可观察对象。
在modifyData
方法中,我们使用ES6中的一个数组方法map
来遍历数据并进行修改,然后我们将修改后的数据存储在一个新的数组中,并返回这个数组。
这样,我们就可以通过MyOtherService
服务来获取已修改的数据了。