[英]"subscription" in an observable
假设我有这项服务
export class CacheApiService {
...
updateTokenCache() {
const url = `${this.consultationBaseURL}/cache/idm/updateTokenCache`;
return this.httpClient.put<any>(url, {});
}
}
和
export class CacheService {
updateTokenCache() {
return this.cacheApiService.updateTokenCache().pipe(
catchError(err => throwError(err)),
tap( res => {
this.logger.info(`CacheService - updateTokenCache()`, res);
})
);
}
}
不管怎样,这不重要
问题就在那里:在另一个服务中,我有这个返回令牌的方法
refreshToken(): Observable<string> {
this.logger.debug('refreshToken()');
return this.impersonateUser().pipe(
takeUntil(this.destroySubject$),
tap( token => {
this.logger.info('token', token);
if (token) {
this.refreshTokenState(token);
this.storeUserPrincipal(token);
}
})
);
}
我想,一旦我获得令牌,通过从该 Observable 内部的 CacheService 调用方法 updateTokenCache() 将其设置在缓存中。 但我想返回第一个值(令牌)
我是否在 tap() 内订阅? 我猜不是 this.cacheService.updateTokenCache().subscribe()
所以我找不到实现这一目标的方法,当然我想在那个可观察的范围内做到这一点
谢谢您的帮助
您可以使用switchMap
缓存令牌并使用map
返回令牌而不是来自可观察的updateTokenCache()
的响应。
refreshToken(): Observable<any> {
this.logger.debug('refreshToken()');
return this.impersonateUser().pipe(
takeUntil(this.destroySubject$),
tap(token => {
this.logger.info('token', token);
if (token) {
this.refreshTokenState(token);
this.storeUserPrincipal(token);
}
}),
switchMap((token: any) =>
this.cacheService.updateTokenCache(token).pipe(
map(() => token) // <-- send back the token here
)
)
);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.