如何以“嵌套订阅”模式返回第二个值?

问题描述 投票:0回答:2

在Angular 7应用程序中,我有一个服务的方法部分,它必须返回一个Observable,然后由某些客户端代码订阅。

这个方法建立在“嵌套订阅”模式上,关于我读到的BTW,它是一种反模式。但说实话,我对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在第二个之前被解释,尽管客户端代码实际上需要订阅第二个返回值。

有关如何使其正常工作的任何想法?

谢谢

angular subscribe
2个回答
0
投票

使用switchMap。

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

然后,订阅返回的observable。


0
投票

你可以尝试下面使用switchmap等待第一个响应,然后再做另一个

public signIn(customer): Observable<Customer> {
        return this.apiProvider.getCustomerTokens(customer)
            .switchMap(token => {
                return this.apiProvider.getCustomer(token); 
            }).subscribe(customerData => {
                        // some code here...
                    });
    }
© www.soinside.com 2019 - 2024. All rights reserved.