Как вернуть второе значение в шаблоне «вложенная подписка»? - PullRequest
0 голосов
/ 01 апреля 2019

В приложении Angular 7 у меня есть часть метода службы, которая должна возвращать Observable, чтобы в свою очередь подписаться каким-то клиентским кодом.

Этот метод основан наШаблон «вложенных подписок», о чем я читал, кстати, что это своего рода анти-шаблон.Но, честно говоря, я недостаточно квалифицирован в Angular, чтобы заменить его.

Код выглядит примерно так:

public signIn(customer): Observable<Customer> {
        return this.apiProvider.getCustomerTokens(customer)
            .pipe(map(token => {
                return this.apiProvider.getCustomer(token)
                    .subscribe(customerData => {
                        // some code here...
                    });
            }));
    }

Это вызывает синхронную проблему, вероятно, из-заТот факт, что первое return интерпретируется перед вторым, несмотря на то, что клиентский код фактически должен подписаться на возвращаемое значение second .

Есть идеи о том, как заставить его работать должным образом?

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Вы можете попробовать ниже, используя switchmap , чтобы дождаться первого ответа и затем сделать еще один

public signIn(customer): Observable<Customer> {
        return this.apiProvider.getCustomerTokens(customer)
            .switchMap(token => {
                return this.apiProvider.getCustomer(token); 
            }).subscribe(customerData => {
                        // some code here...
                    });
    }
0 голосов
/ 01 апреля 2019

Используйте switchMap.

public signIn(customer): Observable<Customer> {
        return this.apiProvider.getCustomerTokens(customer)
            .pipe(switchMap(token => this.apiProvider.getCustomer(token))
    }

Затем подпишитесь на возвращаемую наблюдаемую.

...