类型“ Observable <任务>”不可分配给类型“ Observable <任务[]>”

时间:2019-04-02 15:44:41

标签: angular

我正在处理一些旧代码,这有点混乱,而且似乎不了解数据流。基本上,我试图使我的服务返回所需对象的数组。这些对象中的每一个都应该是相应模型的实例。

这是该服务的代码:

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函数似乎并未遍历值数组,而是将整个数组传递给反序列化方法。为什么会发生?

2 个答案:

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