При обновлении до HttpClient: Uncaught в Promise / Http Failure во время анализа - PullRequest
0 голосов
/ 02 апреля 2019

В моем угловом приложении я обновляюсь с Http до HttpClient, который, кажется, не работает при работе с Promises.

Кажется, что вам нужно использовать небольшой обходной путь при работес обещаниями в httpClient я попытался сделать это, как в этой статье: https://vitalflux.com/angular-promise-explained-code-example/, но безрезультатно.

Я также попытался работать с Observable вместо этого (и подписаться в component.ts), но это также не сработало.


service.ts ( со старым Http , работает как шарм)

public viewPDF(profileId: string, profileVersion: Date): Promise<any> {
    const pdfVersion = _.split(_.replace(profileVersion.toISOString(), /:/g, '-'), '.')[0];

    return this.http
      .get(`${this.pdfApiView}/${profileId}/${pdfVersion}`)
      .toPromise()
      .then(response => response);
  }

service.ts (- теперь с HttpClient )

  public viewPDF(profileId: string, profileVersion: Date): Promise<any> {
    const pdfVersion = _.split(_.replace(profileVersion.toISOString(), /:/g, '-'), '.')[0];

    return this.httpClient
      .get<any>(`${this.pdfApiView}/${profileId}/${pdfVersion}`)
      .toPromise()
      .then(response => response);
  }

component.ts

 this.pdfDocumentService.viewPDF(prof[0].id, prof[0].version).then(resp => {
      if (resp._body !== 'file not found') {
        this.pdfList.set(prof[0].id + prof[0].version, resp.url);
      }
 });

Новый метод приводит к появлению следующих сообщений об ошибках:

ERRORОшибка: Uncaught (в обещании): HttpErrorResponse: {"headers": {"normalizedNames": {}, "lazyUpdate": null}, "status": 200, "statusText": "OK", "url": "http://localhost:4200/api/pdfFile/i1cib1pgvk000000/2019-04-02T12-47-57","ok":false,"name":"HttpErrorResponse","message":"Http ошибка во время анализа для http://localhost:4200/api/pdfFile/i1cib1pgvk000000/2019-04-02T12-47-57","error":{"error":{},"text":"%PDF-1.3\n%����\n6 0 obj \ n << \ n / Type / Page \ n / Parent 1 0 R \ n / MediaBox ... </p>

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Спасибо, вот что сработало:

return this.httpClient.get(`${this.pdfApiView}/${profileId}/${pdfVersion}`, {
      observe: 'response',
      responseType: 'blob',
    });

Мне также нужно было опустить кастинг (пост)

0 голосов
/ 02 апреля 2019

Вам не нужно использовать .then () .toPromice (), просто посмотрите на этот пример.

К вашим услугам.

getData(): Observable<any> {

    let body: any = {};

    const options = { responseType: 'blob' };

    const url = `your api url`;

    return this._http.post<any>( url, body, options );
}

и затем потребляют

this._service.getData().subscribe(res => {
  console.log(res)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...