>source

API에 대한 여러 호출을 피하기 위해 외관 서비스를 만들었습니다.

전화retrievemyuser.요청이 이루어질 때마다.

요청이 이루어지지 않은 경우 값을 저장하지 않았습니다.행동 조건...에 이미 만들어지면 값이 저장됩니다.

facade-service.ts :

...
export class UserServiceFacade extends UserService {
  public readonly user= new BehaviorSubject(null);
  private readonly getCurrentUser= new CognitoUserPool(environment.cognitoPoolData).getCurrentUser()
  retrieveMyUser() {
    console.log(this.user.value);
    return this.user.pipe(
      startWith(this.user.value),
      switchMap(user=> (user ? of(user) : this.getUserFromServer())),
      take(1)
    )
  }
  private getUserFromServer() {
    return super.retrieveMyUser(null, environment.liveMode).pipe(tap(user=> this.storeUser(user)));
  }
  public clearUser() {
    console.log("cleared");
    this.storeUser(null)
    console.log(this.user.value); //Output null
  }
  private storeUser(user: V2UserOutput) {
    this.user.next(user);
  }
}

사용자 로그 아웃이 내 데이터를 지우려는 경우행동 조건...에 내하려고하는 것은 내가 전화하는 것입니다.맑은()facade-service.ts 의 방법.

auth.service.ts :

...
  logout() {
    var cognitoUser= this.userPool.getCurrentUser();
    if (cognitoUser) {
      this.userServiceFacade.clearUser()
      cognitoUser.signOut();
    }
    this._router.navigate(['/login']);
  }
...

방법은 잘 호출되고 을 올바르게 인쇄합니다.

그러나 로그 아웃 후에 로그인 할 때console.log (this.user.value);RetrieveMyUser에서는 여전히 이전 값을 출력합니다.없는로그 아웃했을 때.

그래서, 어떻게 행동을 취소하거나 다른 서비스에서 재설정 할 수 있습니까?

대신이를 사용하십시오 .User.getValue ()

Dimanoid2021-06-13 02:08:07

readonly on user= new behavioRubject (null)를 제거하십시오.

N.F.2021-06-13 02:08:07

당신은 탈퇴 (1)을 제거해야합니다.

Lukasz Gawrys2021-06-13 02:08:07

UserServiceFacade의 인스턴스가 하나 뿐입니까?

Khanh Chau2021-06-13 02:08:07

감사하지만 모든 솔루션은 작동하지 않습니다. @lukaszgawry가 intrems가 null을 유지할 것이므로 모두 분해하면 해제됩니다. 그러나 당신처럼 나는 문제가 내 파이프 () 안에있는 것에서 왔다고 생각합니다.

crg2021-06-13 02:08:07
  • 이전 python : Azure 기능을 사용하여 BLOB 저장소에서 JSON 파일을 읽는 방법 파이썬이있는 BLOB 트리거
  • 다음 .net : 해결 방법의 모든 분석기 규칙을 얻는 방법