更新到 HttpClient 时:解析期间未捕获 Promise/Http Failure

Posted

技术标签:

【中文标题】更新到 HttpClient 时:解析期间未捕获 Promise/Http Failure【英文标题】:When Updating to HttpClient: Uncaught in Promise/Http Failure during parsing 【发布时间】:2019-08-23 22:34:13 【问题描述】:

在我的 Angular 应用程序中,我正在从 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);
  

组件.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);
      
 );

新方法导致以下错误消息:

错误错误:未捕获(承诺):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

【问题讨论】:

如果你正在处理文件,你可能需要 responseType: 'blob' (info) Angular HttpClient "Http failure during parsing"的可能重复 【参考方案1】:

你不需要使用.then() .toPromise(),看这个例子就行了。

为您服务。

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)
)

【讨论】:

【参考方案2】:

谢谢你,这是有效的:

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

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

【讨论】:

以上是关于更新到 HttpClient 时:解析期间未捕获 Promise/Http Failure的主要内容,如果未能解决你的问题,请参考以下文章

Angular HttpClient“解析期间的Http失败”

如何在应用程序加载期间捕获“未捕获的类型错误:无法读取未定义的属性‘isModel’?

在 Windows 上使用 Jenkins 运行 Selenium 测试期间,如何在未实际登录机器时捕获屏幕截图?

架构比较 - 填充源模型期间捕获的意外异常:对象引用未设置为实例对象

Polly HandleTransientHttpError 未捕获 HttpRequestException

在 JSON.parse 期间在节点中捕获异常