如何为多个请求一次获取会话令牌?

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

有一些服务。某些组件通过此服务获取实体。该组件多次获取实体。

当组件再次接收到实体时,将启动 getEntity() 和 getToken() 方法。然而,会话令牌始终是相同的。

我需要方法 getToken 仅启动一次。此后,组件可以重复运行 getEntity() 方法。请帮我做这个。

@Injectable()
export class SomeService { 
  getToken() {
    return inject(TokenService).get();
  }
 
  getEntity() {
    return this.getToken().pipe(
      switchMap(token => inject(EntityService).get(token))
    );
  }
}

PS: 有很多组件使用此服务,因此我不想将令牌检索放入每个组件中。

angular
1个回答
0
投票

您可以尝试

share
停止多次获取令牌,

@Injectable()
export class SomeService { 
  token$ = getToken();
  getToken() {
    return inject(TokenService).get().pipe(share());
  }
 
  getEntity() {
    return this.token$.pipe(
      switchMap(token => inject(EntityService).get(token))
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.