我在将问题转换为Angular2中的http observable时遇到问题。 我有2个方法getEmployees()和getEmployee(id:number)。
我能够成功切换getEmployees()但是我在尝试切换getEmployee(id:number)时收到各种错误消息(过滤器在类型observable上不存在)
原创 - Service.ts
getEmployee(id: number) {
return Promise.resolve(EMPLOYEES).then(
employees => employees.filter(employee => employee.id === id)[0]
);
第一次尝试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;
});
答案 0 :(得分:2)
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;
});
答案 1 :(得分:0)
您需要返回一个observable来订阅:
这将返回一个observable,该observable将映射到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让我意识到我错过了一个非常重要的一步哈哈。