2
在我的Angular2应用程序中,我从REST API获取响应并对其进行操作,以便在用户界面中显示它们。处理204- HTTP Observable中没有内容响应 - Angular2
我编写我的应用程序根据以下教程。
这是我的方法从服务器获取
getTendersByCategory(categoryName: string){
console.log("get tenders by category "+categoryName);
let tendersByCategory = this._http
.get(this._endpointUrl + "tender/get-by-category-name/" + categoryName)
.map(mapTenders)
.catch(handleError);
return tendersByCategory;
}
以下函数用于现在处理响应
function mapTenders(response: Response): Tender[] {
console.log('tender.service.ts -> mapTenders');
/*if(response.status == 204){
console.log("response = 204 - No content in response");
return null;
}*/
return response.json().map(toTender);
}
function toTender(r: any): Tender {
console.log('tender.service.ts -> toTender');
let tender = <Tender>({
id: r.id,
name: r.name,
publisher: r.publisher,
});
return tender;
}
function handleError(error: any) {
console.error(error.message);
return Observable.throw(error.message);
}
的问题是,我得到的回应204 - 我的请求没有内容回应。在这种情况下,我得到的错误
无法读取空的特性“地图”
我曾尝试到现在为止,我检查响应是否是我mapTenders
功能204;如果是的话,我会返回null而不继续映射到我的对象。 (这部分代码在给定代码中已被注释掉)
这是处理此响应的正确方法吗?
但在这种情况下,即使我摆脱了错误,在我的.component.ts
文件中,我没有得到一个空的列表。它显示没有任何过滤的所有投标。 (这可能是刷新整个页面的结果,但显然页面不会重新加载。)
这是我的component.ts文件中的方法。
getTendersByCategory(categoryName: string){
this._tendersService.getTendersByCategory(categoryName).
subscribe(
tenders => this._tenders = tenders,
error => this._error_tender = error
);
console.log("tenders.component.ts.getTendersByCategory -> tenders array = "+this._tenders.length);
//for debugging purpose
//this prints all the tenders. What I wished to see is nothing getting printed
for(let i=0; i< this._tenders.length;i++){
printTender(this._tenders[i]);
}
}
我能在这里做什么?使用observables时应该如何处理204响应?
我怎样才能做到这一点在我的服务,因为我有一个不同的代码'this._http 获得(这一点。 _endpointUrl +“tender/get-by-category-name /”+ categoryName) .map(mapTenders) .catch(handleError);' – vigamage
谢谢您的回答。但你能为我的案子建议我一个解决方案吗?我正在调用外部函数来映射我收到的对象 – vigamage
删除外部函数并尝试使用相同函数中的可观察对象 – Vignesh