RequestOptions的Angular2 Http Response错误

时间:2017-09-18 19:44:16

标签: angular arrow-functions

这两个函数有什么区别,

  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

1 个答案:

答案 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;以异步方式发射。

希望这有帮助!