我必須呼叫我的組件。第二個取決于第一次呼叫的結果。在第一次呼叫時,我將組件變數的值設定為“鎖定”。當結果為真時,應該執行第二次呼叫 --> 鎖定 = 真。但它會在第一次呼叫完成并設定值之前到達代碼。我如何才能等待執行我的代碼,直到呼叫“getByUsernamer”完成。
這是我的代碼:
export class LoginComponent implements OnInit {
errorMessage: string = "";
isLocked = false;
username: string | null = "";
constructor(
private authService: AuthService,
private cookieService: CookieService,
private router: Router,
private jwtTokenService: JwtTokenService,
private userService: UserService) {
}
ngOnInit(): void {
}
test() {
this.userService.getUserByUsername(this.username)?.subscribe(
{
next: response => {
let user: User = response;
this.isLocked = user.locked
}
}
);
if (!this.isLocked) {
this.router.navigate(['/home']).finally(
() => this.userService.setLastLogin(this.username).subscribe());
} else {
this.errorMessage = "The user is locked."
}
}
}
uj5u.com熱心網友回復:
您可以isLocked在第一次呼叫的回呼中檢查變數,這樣您就可以確定您收到了答案并且isLocked變數已設定
export class LoginComponent implements OnInit {
errorMessage: string = "";
isLocked = false;
username: string | null = "";
constructor(
private authService: AuthService,
private cookieService: CookieService,
private router: Router,
private jwtTokenService: JwtTokenService,
private userService: UserService) {
}
ngOnInit(): void {
}
test() {
this.userService.getUserByUsername(this.username)?.subscribe(
{
next: response => {
let user: User = response;
this.isLocked = user.locked;
// Moved here the test so it happens only after
// the first request receive the answer
if (!this.isLocked) {
this.router.navigate(['/home']).finally(() => this.userService.setLastLogin(this.username).subscribe());
} else {
this.errorMessage = "The user is locked."
}
}
}
);
}
}
uj5u.com熱心網友回復:
你可以使用 Promises 來解決這個問題。這是一個供您參考的鏈接https://codecraft.tv/courses/angular/es6-typescript/promises/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/496490.html
標籤:javascript 有角度的 打字稿 http 异步等待
