Saltar al contenido

Operador RxJs de 6 tubos angulares para encadenar 3 observables dependientes

Puede que se de el caso de que halles algún problema con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes aplicar el código al trabajo final.

Solución:

Algo así podría funcionar

getUsers()
.pipe(
  switchMap(users => from(users)),
  mergeMap(user => forkJoin(getAddresses(user.id), getCompanies(user.id))
                   .pipe(map(data => (user, addresses: data[0], companies: data[1] )))
  tap(data => data.user.addresses = data.addresses),
  tap(data => data.user.companies = data.companies),
  map(data => data.user),
  toArray()
  )
)

Aplicado a un caso de uso diferente, una cadena similar se explica con más detalles aquí.

Para encadenar observables, puedes usar el flatMap función. Esta función es como promesas entonces, lo que significa que la función solo se ejecuta una vez que el observable se ha resuelto en un valor.

También hay una función observable llamada forkJoin lo que le permite esperar a que varias solicitudes asíncronas se hayan resuelto en un valor.

Ejemplo:

getUsers().flatMap((users) => 
    // the users variable is the list of users
    var multipleObservables = [];
    users.forEach((u) => 
      multipleObservables.push(
         getUserAddresses(u.id).map((usersAddresses) => 
            u.addresses = usersAddresses;
            return u;
         );
      );
    );
    return forkJoin(multipleObservables);
).flatMap((usersWithAddresses) => 
    // the usersWithAddresses variable is an array of users which also have their addresses
    var multipleObservables = [];
    usersWithAddresses.forEach((u) => 
       multipleObservables.push(
          getUserCompanies(u.id).map((usersCompanies) => 
             u.companies = usersCompanies;
             return u;
          );
       );
    );
    return forkJoin(multipleObservables);
);

Puede escribir algo como esto para encadenar su solicitud y hacer crecer sus objetos de usuario.

Comentarios y puntuaciones del tutorial

Si sostienes alguna sospecha y disposición de refinar nuestro escrito te proponemos dejar una crónica y con mucho placer lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *