Я создал службу, у которой есть метод, который извлекает токен из API, который вызывает метод subscribe () для внутреннего использования. Этот метод вызывается из компонента и не возвращает Observable, только строку, содержащую токен.
Затем существует другой метод, который должен вызываться из компонента после получения токена, однако он всегда вызывается перед другим. Я даже пытался с async / await в компоненте, но он не работал.
// api.service.ts
logIn() {
if(!this.token) {
this.http.post(this.apiURL + "/token/", {username: "test", password: "test"}, options).subscribe(response => {
if(response.status == 200) {
this.body = response.body;
this.token = "Token " + this.body.token;
window.sessionStorage.setItem("TOKEN_KEY", this.token);
console.log(this.token);
}
}
return this.token;
}
Как вы видите, метод просто возвращает токен, поэтому я создаю Promise в компоненте и как только он разрешается вызовом метода getProduct (), но он вызывается до того, как токен уже существует.
// product.component.ts
async getLogin() {
const resp = await this.apiService.logIn();
console.log(resp);
}
getMenu() {
this.apiService.getMenu().subscribe(resp => {
console.log(resp);
});
constructor(private apiService: APIService) {
this.getLogin().then(resp => {
console.log('Called');
// Call before the token has already been created!
this.getMenu();
});
}