在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
在第二个之前被解释,尽管客户端代码实际上需要订阅第二个返回值。
有关如何使其正常工作的任何想法?
谢谢
使用switchMap。
public signIn(customer): Observable<Customer> {
return this.apiProvider.getCustomerTokens(customer)
.pipe(switchMap(token => this.apiProvider.getCustomer(token))
}
然后,订阅返回的observable。
你可以尝试下面使用switchmap等待第一个响应,然后再做另一个
public signIn(customer): Observable<Customer> {
return this.apiProvider.getCustomerTokens(customer)
.switchMap(token => {
return this.apiProvider.getCustomer(token);
}).subscribe(customerData => {
// some code here...
});
}