更新到 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 测试期间,如何在未实际登录机器时捕获屏幕截图?
架构比较 - 填充源模型期间捕获的意外异常:对象引用未设置为实例对象