Следующее наблюдаемое:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { CookieService } from 'ngx-cookie-service';
import { Observable } from 'rxjs';
@Injectable()
export class AuthService {
readonly loginUrl = <login_url>;
readonly authStatusUrl = <auth_status_url>;
constructor(private http: HttpClient, private cookieService: CookieService) {}
loggingIn = false;
login(username: string, password: string) {
this.loggingIn = true;
const creds = {
username: username,
password: password
};
this.http
.post<any>(this.loginUrl, creds, {})
.subscribe(
data => this.onLoginSuccess(data),
error => this.onLoginFail(error));
}
handleAuth(): Observable<any> {
const token = this.cookieService.get('token');
const refresh = this.cookieService.get('refresh');
// should wait for loggingIn to be false
return this.http
.post<any>(this.authStatusUrl, { }, {
headers: {
token: token,
refresh: refresh
}
});
}
public onLoginSuccess(data) {
this.loggingIn = false;
this.cookieService.set('token', data.access_token);
this.cookieService.set('refresh', data.refresh_token);
}
onLoginFail(err) {
console.log('Faild to login');
this.loggingIn = false;
}
}
не должно выполняться, пока локальная переменная не станет ложной.
Я прочитал, что это должно быть сделано с помощью Promises иВызов функции async с оператором await, но я не смог найти то, что будет опрашивать значение переменной, только «подождать некоторое время и решить».
Основная идея состоит в том, чтобы вызвать handleAuth, и внутренне он должен убедиться, что вход в систему не выполняется, ожидая локальной переменной (или что-то произойдет)