Angular вложенный HTTP-вызов без использования блока успеха / сбоя - PullRequest
1 голос
/ 24 апреля 2020

Здесь сервис createSampleUser может выдавать ответ об ошибке / ошибке от сервера. но я хочу вызвать сервис getUsers после вызова сервиса createSampleUser. здесь я не использую следующий блок ошибок ... тогда зачем мне писать эти 2/3 строки кода. Есть ли способ вызова вложенных вызовов без проверки ответа об успешном / ошибочном первом вызове службы?

getUsers() {
        this.userService.createSampleUser({ fName: 'surendra', lName: 'tarai' })
            .subscribe(
                next => { },
                error => { },
                () => {
                    this.users$ = this.userService.getUsers('BLR');
                }
            );
    }

Ответы [ 2 ]

3 голосов
/ 24 апреля 2020

Для этого можно использовать switchMap.

import { switchMap } from 'rxjs/operators';
....
getUsers() {
        this.userService.createSampleUser({ fName: 'surendra', lName: 'tarai' })
            .pipe(switchMap(sampleUser => this.userService.getUsers('BLR')))
            // .subscribe(); You have to subscribe to this stream. If this is a service,
            // I would subscribe from the component. If it's a component, 
           //then keep the subscribe and do something with it
    }
2 голосов
/ 24 апреля 2020

Просто используйте switchMap :

this.userService.createSampleUser({ fName: 'surendra', lName: 'tarai' })
    .pipe(switchMap(() => this.userService.getUsers('BLR')))
    .subscribe(users => ...)

Edit:

const createUser$ = this.userService.createSampleUser({ fName: 'surendra', lName: 'tarai' });
const handlingError = catchError(err => of(err); // guarantee flow continuity
const getUsers$ = this.userService.getUsers('BLR');
const stream$ = createUser$.pipe(handlingError, concatMap(() => getUsers$);

stream$.subscribe();

Обратите внимание, что подписка stream $ будет выдавать только результат getUsers $, если вы Чтобы получить события всех подпотоков, используйте concat вместо concatMap .

...