我为所有api调用创建了一个通用的构建请求方法。响应没问题,但是没有通过此方法。
我的api.ts课程(片段)
buildRequest(url, method, body?) {
let options = new RequestOptions({
url: this.apiUrl + url,
method: method,
body: body
});
let req = new Request(options);
return this.http.request(req)
.map(res => {
res.json();
})
.catch(this.handleError);
}
handleError(error: any) {
return Observable.throw(error.message);
}
在同一个班级中我定义了所有的调用:
getItem() {
return this.buildRequest('url', RequestMethod.Get)
}
然后从我做的组件
this.api.getItem().subscribe(res => {
this.item = res;
}
})
其他地方,但在.map内,res 未定义。当我经常使用
时返回this.http.get(...)
和这里显示的逻辑相同,它工作正常。我做错了什么?
我正在导入这两个:
从' rxjs / Observable'中导入{Observable};
导入' rxjs / Rx'
答案 0 :(得分:1)
在你的buildRequest
方法中,你犯了一个小错误。当使用带花括号的lambda表达式时,你必须返回一些内容:
x => x.Field // <-- this is a shorthand
等于
x => { return x.Field; }
因此.map
调用中的代码应如下所示:
return this.http.request(req)
.map(res => {
return res.json();
})
.catch(this.handleError);