这两个函数有什么区别,
getFeedContent(url: string): Observable<Feed> {
return this.http.get(url)
.map(this.extractFeeds)
.catch(this.handleError);
}
getFeedContent(url: string): Observable<Feed> {
return this.http.get(url, function (res) {
console.log(res) // and other statements...
}).map(this.extractFeeds)
.catch(this.handleError);
}
第一个工作正常,但第二个抛出错误说
Type '(res: any) => void' has no properties in common with type 'RequestOptions
答案 0 :(得分:0)
第二个版本正在触发错误,因为Http get()或HttpClient get()的第二个参数需要一个选项对象,例如RequestOptions(Angular 2.x)来设置标题,参数,或类似的。第二个版本试图传递回调来处理异步响应而不是选项对象。错误消息表明它期望属性符合RequestOptions。
使用Angular 2.x设置标头Http看起来像:
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.get(this.heroesUrl, options)
.map(this.extractData)
.catch(this.handleError);
为Angular 4+ HttpClient设置标题如下所示:
http
.get('/api/items/add', {
headers: new HttpHeaders().set('Authorization', 'my-auth-token'),
})
.subscribe();
否则版本1将是使用RxJS运算符map()
根据需要转换响应的有效方法,以及运算符catch()
来处理Http错误,因为您需要应用程序。我们在第二个示例中尝试完成的操作并不清楚,但您可能希望将这些类型的语句移动到链式操作符subscribe()
以处理响应时#&# 39;以异步方式发射。
希望这有帮助!