在我的有角度的应用程序中,我正在从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 ...
答案 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',
});
我还需要省略演员表(帖子)