Angular2承诺http可观察

时间:2016-06-09 01:16:25

标签: angular rxjs observable

我在将问题转换为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;
    });

2 个答案:

答案 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);
);

然后,您可以像这样订阅它,订阅的第一个回调是nextsuccessful回调:

let id = +curr.getParam('id');
this.employeeService.getEmployee(id).subscribe(employees => {
  maybe this.employee = employees[0];
});

第二次回调是error,第三次回调是complete

仅供参考,没有测试它,但它基本上是可观测量背后的想法。

编辑:@Sasxa让我意识到我错过了一个非常重要的一步哈哈。