Изменить свойство объекта в трубе (rx js) - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть объект Person.

interface Person {
  name: string;
  age: number;
}

Я получаю поток Persons с использованием наблюдаемой.

getPersons(): Observable<Person> {
  return this.myService.getPerons.subscribe(data);
}

Я хочу применить модификацию к поле age и оставьте имя таким, как оно есть

person.age = person.age + 2;

Пример:

Исходный поток: {name: 'John doe', age: 40}.

После применения трубы: {имя. 'Джон Доу', возраст: 42}

Я думаю, что .subscribe(data).pipe(map(e => ...)) не является решением здесь, и я ищу альтернативу для применения на трубе

Ответы [ 3 ]

4 голосов
/ 28 апреля 2020

map также является решением, и вы также можете использовать просто tap или просто изменить в subscribe. Но вы должны использовать их до subscribe

.pipe(tap(e => /**/)).subscribe(data) -> this can omit the return data
.pipe(map(e => /**/)).subscribe(data) -> this must return data
2 голосов
/ 28 апреля 2020

Вы можете сделать это с оператором map в сервисе. Попробуйте следующее

myService

getPerons(): Observable<Person> {
  this.http.get('url').pipe(map(response => ({...response, age: response.age + 2})));
}

И вы можете подписаться как обычно в компоненте

this.myService.getPerons.subscribe(data => { this.persons = data });
1 голос
/ 28 апреля 2020

Вы можете использовать оператор tap для выполнения этой работы

.subscribe(data).pipe(tap(e => ...))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...