更新到HttpClient时:解析期间未发现Promise / Http失败

时间:2019-04-02 14:41:49

标签: angular typescript promise httpclient

在我的有角度的应用程序中,我正在从Http更新为HttpClient,在使用Promises时似乎不起作用。

在处理httpClient中的Promise时,您似乎需要使用一些“变通方法”,我试图像本文中那样做: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错误:未捕获(承诺):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://localhost:4200/api/pdfFile/i1cib1pgvk000000/2019-04-02T12-47-57时Http失败“,” error“:{” error“: {},“ text”:“%PDF-1.3 \ n%����\ n6 0 obj \ n << \ n / Type / Page \ n / Parent 1 0 R \ n / MediaBox ...

2 个答案:

答案 0 :(得分:0)

您无需使用.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)
})

答案 1 :(得分:0)

谢谢,这是行得通的:

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

我还需要省略演员表(帖子)