2016-06-09 3 views
0

У меня проблема с переключением с обещания на http, наблюдаемое в Angular2. У меня есть 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; 
    }); 

ответ

2

http.get() возвращает наблюдаемый объект Response. Вам нужно получить данные от него, как правило, путем вызова метода json(). Тогда можно применить преобразования к данным - карта, фильтр и т.д.

getEmployee(id: number) { 
    return this.http.get(employeesUrl + id) 
    .map(response => response.json()) 
    .map(employee => employee.id === id)[0] 
); 

Observable возвращает этот сервис является холодной - это ничего не делать, пока вы явно не попросите, подписавшись на него в компоненте:

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

О, черт, я забыл о части .json, ха-ха, вы правы. –

0

Вы должны вернуться наблюдаемым подписаться:

Это возвращает наблюдаемое, который будет отображаться на сотрудник с идентификатором равным идентификатора прошел.

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.

FYI, не испытал его, но его в основном идея наблюдаемых.

Редактировать: @Sasxa заставило меня понять, что мне не хватает действительно большого шага хаха.

Смежные вопросы