Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

364
Views
¿Cómo modificar datos en Observable en Angular 2?

Estoy trabajando en aprender Angular 2 y Typescript. Estoy creando una aplicación web simple que toma datos de una API WEB y los muestra en una lista. Luego, una vez que el usuario hace clic en un elemento de la lista, se le lleva a una página de detalles.

Tengo un servicio que creé para hacer la llamada a la API que hace lo siguiente:

 GetData() { let data = this.http.get('http://server.name/api/GetData') .map((res) => res.json()); return data; }

Luego, en un componente, me suscribo a los datos como este:

 this.myService.GetData() .subscribe((myService) => this.items = myService);

Cuando regrese http.get, me gustaría realizar algún procesamiento en los objetos JSON antes de regresar del método GetData(). Por ejemplo, agregue una nueva propiedad llamada ID. Esencialmente algo como el pseudocódigo a continuación:

 for each(item in data) { item.ID = newID(); //method for creating IDs }
  1. ¿Es esto algo que se puede hacer?
  2. En caso afirmativo, ¿es algo que DEBE hacerse o hay una mejor manera de lograr lo que estoy tratando de hacer?

Gracias

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puede hacer el procesamiento en el código de su GetData, dentro del map :

 // For RxJS v5 this.http .get('http://server.name/api/GetData') .map(result => { const items = <any[]>result.json(); // could be SomeItem[] instead of any[] items.forEach(item => item.ID = ...); return items; }); // For RxJS v6 this.http .get('http://server.name/api/GetData') .pipe(map(result => { const items = <any[]>result.json(); // could be SomeItem[] instead of any[] items.forEach(item => item.ID = ...); return items; }));

Luego, cuando reciba el objeto en su suscripción, los elementos deben tener las identificaciones asignadas.

Aquí está la referencia a la documentación de RxJs Observable: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-map

about 4 years ago · Santiago Trujillo Report

0

la idea es:

  • obtener el resultado
  • asigne el resultado para obtener solo el json
  • como su json es una matriz, produzca un Observable para cada dato, luego cambie su identificación y envíe los datos de vuelta
  • reunirlos de nuevo en una matriz

el operador mergeMap (reemplazado flatMap en rxjs 5.5+) se usa porque un operador Observable siempre devuelve un Observable, pero dado que creamos un Observable dentro del resultado mismo, produce un Observable>, mergeMap elimina una capa Observable. Espero que esto ayude

 GetData():Observable<WhateverWithIDInside[]> { let data = this.http.get('http://server.name/api/GetData') .map(res => res.json()) .mergeMap(dataArr => Observable.from(dataArr) .map(data => { data.ID = newID(); return data; }) .toArray() ); }
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!