Как я могу отобразить выходные данные из сервиса в объект с указанными значениями c в Angular? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть рабочая функция, которая отображает выходные данные вызова службы на объект, а затем на массив.

Ответ от API выглядит следующим образом:

[
  {
     "paper_id": "0015023cc",
     "metadata": { }
     "abstract": []
     ...
  }
  {
     "paper_id": "0015023cc",
     "metadata": { }
     "abstract": []
     ...
  }
]
papersList(): Observable<Paper[]> {
        const url = `${this.allPapersUrl}/`;
        return this.http
            .get(url)
            .pipe(
            map((data: any[]) =>
                data.map(
                    (item: any) =>
                        new Paper(item.paperId, item.metadata, item.paperAbstract)
                    )
                )
            );
    }

Как я могу написать функцию для другого сервиса, который возвращает тот же объект вместо массива?

Выход API из нового сервиса будет:

{
  "paper_id": "0015023cc",
  "metadata": { }
  "abstract": []
  ...
}

Код, который я пытаюсь завершить ..

fetchPaper(pvalue: string): Observable<Paper> {
    const url = `${this.paperDetailUrl}`;
    params.append('paperid', pvalue);
    const url = `${this.paperDetailUrl}`;

    return this.http
             .get(url, {params: params})
             .pipe( ??? 

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

тогда вам не нужно l oop. Также обратите внимание, что вы получаете abstract в ответе, а не paperAbstract

 return this.http
                 .get(url, {params: params})
                 .pipe(map(data:any => new Paper(data.paperId, data.metadata, data.abstract) ) )
1 голос
/ 21 апреля 2020

та же карта оператора ()

return this.http
  .get(url, { params })
  .pipe(
    tap(console.log),
    map(({ paperId, metadata, abstract }) => new Paper(paperId, metadata, abstract)),
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...