Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

128
Vistas
Quiero cambiar la salida de la API con rxjs

Tengo una llamada API, donde uso tubería.

 getCountriesListNights(){ const r = this.http.get<any>(this.APIUrl + "/WorldMapDataNights?&year=" + this.selectedYear + "&month=" + this.selectedMonth +"&gender=" + this.selectedGender + "&age="+this.selectedAge + "&quarter=" + this.selectedQuarter) .pipe(map((res) => {return res.map((res: { id: any; countryName: any; value: any; year: any; name: string; multiPolygon: any[] }) =>({countryName: res.countryName, id: res.id, value: res.value, year: res.year, name: res.name, multiPolygon: res.multiPolygon }))})) .subscribe(res =>{ this.renderMapObject(res); }); };

Funciona bien, puedo cambiar la salida, pero quiero dividir el valor por el valor de otra API, cuando los nombres de los países son los mismos en ambas API. (Quiero dividir res.value por otherapi.value.)

¿Qué puedo hacer ahora?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Algo como esto haría el truco

 getCountriesListNights(){ const r = this.http.get<any>(this.APIUrl + "/WorldMapDataNights?&year=" + this.selectedYear + "&month=" + this.selectedMonth +"&gender=" + this.selectedGender + "&age="+this.selectedAge + "&quarter=" + this.selectedQuarter).pipe(map((res) => {return res.map((res: { id: any; countryName: any; value: any; year: any; name: string; multiPolygon: any[] }) =>({countryName: res.countryName, id: res.id, value: res.value, year: res.year, name: res.name, multiPolygon: res.multiPolygon }))})).subscribe(res =>{ console.log(res); this.renderMapObject(res); this.http.get<any>(this.APIUrl + "/yourSecondApiURL").subscribe(otherapiRes =>{ const finalResult = res.value / otherapiRes .value; console.log(finalResult); } }); };

no es bonito y te vendría bien algo como

 const res = await this.http.get<any>("...firstApiUrlAndMapping...").toPromise(); const res2 = await this.http.get<any>("...secondApiUrlandMapping...").toPromise(); finalResult = res.value/res2.value;

pero ambas formas deberían funcionar bien.

EDITAR

Un ejemplo básico de ejecutar dos llamadas http una dentro de la otra sería

 const res = this.http.get<any>('https://reqbin.com/echo/get/json').subscribe(res =>{ console.log(res); this.http.get<any>('https://reqbin.com/echo/get/json').subscribe(otherapiRes =>{ console.log(otherapiRes); console.log('Both Results:' + res.success + ' -- ' + otherapiRes.success); }); });
about 4 years ago · Santiago Trujillo Denunciar

0

De acuerdo, para lograr el objetivo, necesita una respuesta cumplida de dos fuentes. En general, Promise.all() te da lo que necesitas.

Hay varias formas de lograr su necesidad en el mundo de RxJS. Por ejemplo, el operador zipWith devuelve un flujo que notifica una matriz de resultados (su fuente y sus entradas de argumento).

Una muestra con la que puedes jugar:

 of('Foo') .pipe( delay(1000), tap(() => console.log('Foo succeeded')), zipWith( of('Bar').pipe( delay(2000), tap(() => console.log('Bar succeeded')) ), of('Baz').pipe( delay(2500), tap(() => console.log('Baz succeeded')) ) ), // You can process and transform the outcome map(([foo, bar, baz]) => foo + bar + baz) ) .subscribe(result => { console.log('All succeeded:', result); });

https://stackblitz.com/edit/rxjs-er8zx1?file=index.ts

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda