javascript - Ändra en egenskap hos ett objekt i en pipe (rxjs)


Jag har ett objekt Person.

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

Jag får en ström av Persons med hjälp av en observabel.

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

Jag vill göra en ändring i åldersfältet och behålla namnet som det är

person.age = person.age + 2;

Exempel :

Originalström: {namn: 'John doe', ålder: 40}.

Efter att ha tillämpat rör: {name. 'John doe', age: 42}

Jag antar att .subscribe(data).pipe(map(e => ...)) inte är lösningen här och jag letar efter ett alternativ att använda på pipen

Svar #1

Du kan göra det med map-operatorn i tjänsten. Prova följande

minTjänst

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

Och du kunde prenumerera som vanligt i komponenten

this.myService.getPerons.subscribe(data => { this.persons = data });

Svar #2

map är också en lösning, och du kan också använda bara tap eller bara modifiera i subscribe. Men du behöver använda dem innan subscribe

.pipe(tap(e => /**/)).subscribe(data) -> this can omit the return data
.pipe(map(e => /**/)).subscribe(data) -> this must return data

Relaterade artiklar