来自 rxjs5 的 Rxjs6:在 REST API 方法中处理 Observable
Rxjs6 from rxjs5: Handling Observables in REST API method
我是 rxjs 和 Angular 的新手,我刚刚发现(感谢我的 WebStorm 给我大量的红色错误消息)rxjs5 与版本 6 有很大不同。
所以我正在关注这个 tutorial,它指导用户使用 rxjs 组装 API 服务。问题是,它是为版本 5 编写的。
这是一个示例 API 路由 版本 5:
public getAllTodos(): Observable<Todo[]> {
return this.http
.get(API_URL + '/todos')
.map(response => {
const todos = response.json();
return todos.map((todo) => new Todo(todo));
})
.catch(this.handleError);
}
阅读文档后,我将 版本 6 路由重写到此:
public getAllTodos(): Observable<Todo[]> {
return this.http
.get(API_URL + '/todos')
.pipe(
map(response => {
return response.map((todo) => new Todo(todo));
}),
catchError(this.handleError)
);
}
问题是,我得到:
Property 'map' does not exist on type 'Object'.
我猜这与响应不是 json 格式有关,尽管响应似乎没有 .json() 方法。
出现错误的原因是,如果您没有指定 response
变量的类型,它会被假定为一个对象。由于 map
是一个数组函数,您需要将响应的类型指定为数组:
this.http.get<any[]>(...).pipe(...); // Preferred
或:
this.http.get(...).pipe(map((response: any[]) => ...)...);
请注意,您应该将上面的 any
替换为从 API 返回的实际类型(字符串、对象等)。
我是 rxjs 和 Angular 的新手,我刚刚发现(感谢我的 WebStorm 给我大量的红色错误消息)rxjs5 与版本 6 有很大不同。
所以我正在关注这个 tutorial,它指导用户使用 rxjs 组装 API 服务。问题是,它是为版本 5 编写的。
这是一个示例 API 路由 版本 5:
public getAllTodos(): Observable<Todo[]> {
return this.http
.get(API_URL + '/todos')
.map(response => {
const todos = response.json();
return todos.map((todo) => new Todo(todo));
})
.catch(this.handleError);
}
阅读文档后,我将 版本 6 路由重写到此:
public getAllTodos(): Observable<Todo[]> {
return this.http
.get(API_URL + '/todos')
.pipe(
map(response => {
return response.map((todo) => new Todo(todo));
}),
catchError(this.handleError)
);
}
问题是,我得到:
Property 'map' does not exist on type 'Object'.
我猜这与响应不是 json 格式有关,尽管响应似乎没有 .json() 方法。
出现错误的原因是,如果您没有指定 response
变量的类型,它会被假定为一个对象。由于 map
是一个数组函数,您需要将响应的类型指定为数组:
this.http.get<any[]>(...).pipe(...); // Preferred
或:
this.http.get(...).pipe(map((response: any[]) => ...)...);
请注意,您应该将上面的 any
替换为从 API 返回的实际类型(字符串、对象等)。