Angular2承诺http可观测
问题描述:
我有一个问题,从承诺切换到Angular2中的http observable。 我有2个方法getEmployees()和getEmployee(id:number)。Angular2承诺http可观测
我能成功切换装getEmployees(),但是我得到的各种错误信息(过滤器不会对观察到的类型存在)尝试切换getEmployee的时候(ID:数)
原创 - 服务。 TS
getEmployee(id: number) {
return Promise.resolve(EMPLOYEES).then(
employees => employees.filter(employee => employee.id === id)[0]
);
1日试service.ts
getEmployee(id: number) {
return this.http.get(employeesUrl + id).map(employee => employee.id === id)[0]
);
原创 - Component.ts
let id = +curr.getParam('id');
this.employeeService.getEmployee(id).then(employee => {
this.employee = employee;
});
答
http.get()
返回可观察的Response对象。您需要从中获取数据,通常是通过调用它的方法json()
。然后,你就可以将转换到你的数据 - 地图,过滤器等
getEmployee(id: number) {
return this.http.get(employeesUrl + id)
.map(response => response.json())
.map(employee => employee.id === id)[0]
);
可观察到这种服务的回报是冷 - 它不会做任何事情,直到你明确地通过订阅它在你的组件问:
let id = +curr.getParam('id');
this.employeeService.getEmployee(id).subscribe(employee => {
this.employee = employee;
});
答
你需要返回一个可观察到订阅:
这将返回一个可观察的是将要被映射到员工ID等于传入的id。
getEmployee(id: number) {
return this.http.get(employeesUrl + id).map(res => res.json()).map(employee => employee.id === id);
);
然后,您可以订阅像这样,第一回叫认购的是next
或successful
回调:
let id = +curr.getParam('id');
this.employeeService.getEmployee(id).subscribe(employees => {
maybe this.employee = employees[0];
});
第二个回调是error
,第三回调complete
。
仅供参考,没有测试它,但它基本上是观察者背后的想法。
编辑:@Sasxa让我意识到我错过了一大步哈哈。
哦,该死的,我忘了.json部分哈哈,你是对的。 –