我正在处理一些旧代码,这有点混乱,而且似乎不了解数据流。基本上,我试图使我的服务返回所需对象的数组。这些对象中的每一个都应该是相应模型的实例。
这是该服务的代码:
public getTasks(): Observable<Task[]> {
return this.http.get(`${this.globals.BASE_URL}/api/v1/tasks`)
.pipe(
map(
(task: Task) => new Task().deserialize(task)
)
);
}
这是任务模型的样子:
export class Task implements IDeserializable
{
public name: string;
public snn: string;
public manufacturer: string;
deserialize(data: any): this
{
Object.assign(this, data);
return this;
}
}
问题在于map函数似乎并未遍历值数组,而是将整个数组传递给反序列化方法。为什么会发生?
答案 0 :(得分:1)
据我从您的代码中了解,您的目标是映射从api返回的任务数组,并在每个任务上调用反序列化函数。
假设您的api确实返回了一个数组,那么您需要做的就是将该数组映射到map中。
‘map((tasks:Task [])=> tasks.map(task => new Task()。deserialize(task)))’
应该做到这一点
答案 1 :(得分:0)
假设服务器正在返回一系列任务,那么您需要遍历返回的任务并创建新任务。
您可以在代码中进行一些更新,以允许“智能”来帮助您。我已经包含了这些内容以及我认为您需要在下面完成任务的代码。
public getTasks(): Observable<Task[]> {
return this.http.get<Task[]>(`${this.globals.BASE_URL}/api/v1/tasks`)
.pipe(
map(
(tasks: Task[]) => {
const newTasks = [];
tasks.forEach(task => new Task().deserialize(task));
return newTasks;
})
);
}