this.userClient.getUser(userName) .pipe( concatMap( user => { this.user = user; return this.userClient.setStatus(this.user.id, 'banned'); } ), concatMap( user => { //set property... return this.userClient.deleteImg(user.img); } ), mergeMap( user => { this.user = user; return this.userClient.setGroup(user.id, 'test'); } ) ) .subscribe( user => { //actions }, error => ... )Me gustaría que mis métodos se activen uno por uno, no todos a la vez. ¿Cómo puedo hacer esto? forkJoin es la única salida?
Mantenga el primer switchMap, pero luego devuelva un concat. El concat secuenciará los tres elementos que desea. Concat espera hasta que uno termine, luego hace el siguiente, y así sucesivamente.
Puede encontrar más información sobre concat en los documentos de RxjS Concat
this.userClient.getUser(userName) .pipe( switchMap( user => { this.user = user; return concat( this.userClient.setStatus(this.user.id, 'banned'), this.userClient.deleteImg(user.img), this.userClient.setGroup(user.id, 'test') ); } ) ) .subscribe( ([user]) => { //actions }, error => ... )En un episodio de Angular Show , describieron algunos de estos operadores de mapeo de orden superior . Puede ayudar a comprender cómo funcionan.
Solo usa switchMap
this.userClient.getUser(userName) .pipe( switchMap( user => { this.user = user; return this.userClient.setStatus(this.user.id, 'banned'); } ), switchMap( user => { //set property... return this.userClient.deleteImg(user.img); } ), switchMap( user => { this.user = user; return this.userClient.setGroup(user.id, 'test'); } ) ) .subscribe( user => { //actions }, error => ... )