Estoy creando una página de inicio de sesión y quiero llamar a /login y /send-otp api juntos mediante una sola función. Ya he creado una página de inicio de sesión y registro.
Mi código :
usuario-datos.servicio.ts :
import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Injectable({ providedIn: 'root' }) export class UserdataService { url= 'http://localhost:9197/register'; url2= 'http://localhost:9197/login'; url3= 'http://localhost:9197/send-otp'; constructor(private http:HttpClient) {} saveRegistration(data:any){ return this.http.post(this.url, data); } loginDone(ldata:any){ return this.http.post(this.url2, ldata); return this.http.post(this.url3, ldata); } }¿Cómo llamar a multiplicar api?
loginDone(ldata:any){ return this.http.post(this.url2, ldata); return this.http.post(this.url3, ldata); }Aplique la definición de alias de TypeScript a su código:
Aquí, de una manera más simplificada, tiene un retorno múltiple con una estructura de alias.
type multi={ x:PelotaAzul, y:PelotaRugosa, } function multiple():multi{ let x:PelotaAzul=new PelotaAzul("jj",5); let y:PelotaRugosa=new PelotaRugosa("s",3,6) let ab : multi ={x,y}; return ab; }También puede devolver una matriz de ambos parámetros como este
loginDone(ldata:any){ return [this.http.post(this.url2, ldata),this.http.post(this.url3, ldata)]; }Creo que crear alias es más elegante, pero para obtener resultados más rápidos, haga el segundo.
Probablemente estés extrañando pensar en tu problema.
Ante todo. Una declaración de retorno siempre detendrá la ejecución de la función, no importa si hay 100 líneas después.
En segundo lugar, su lógica probablemente será: llame al inicio de login primero y luego (usando o no la respuesta) llame al send-otp .
O bien, su lógica podría ser: llamar al inicio de login y send-otp mismo tiempo, pero el método loginDone solo debería devolver un estado válido si ambas solicitudes funcionan bien.
Es por eso que otras respuestas son completamente incorrectas.
Debe conectar en cascada sus observables usando pipe y switchmap, por ejemplo:
return of([this.url2, this.url3]).pipe( switchMap((url) => this.http.post(url, ldata)) )Si desea devolver varios valores, puede hacerlo así.
import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Injectable({ providedIn: 'root' }) export class UserdataService { url= 'http://localhost:9197/register'; url2= 'http://localhost:9197/login'; url3= 'http://localhost:9197/send-otp'; constructor(private http:HttpClient) {} saveRegistration(data:any){ return this.http.post(this.url, data); } loginDone(ldata:any){ return {url1: this.url, url2: this.url2, url3: this.url3}; } }Si desea llamar a múltiples api, marque este.