У меня есть служба с именем API, и первое, что нужно сделать службе, это проверить, является ли токен API действительным, когда токен действителен, продолжить выполнение вызываемой функции. Проблема здесь заключается в том, что запрос нового токена и вызов API вызываются одновременно.
Я попытался изменить функцию checkToken для ожидания и изменить окончательный вызов API на асинхронный, который не работает, потому что функция является наблюдаемой.
Функция checkToken
/*
This function has to run FIRST before the api call (below) is beigin executed.
The issue now is both functions are running at the same time, when the token is expired the call will fail.
*/
checkToken(): Observable<any> {
//this function will check the API token and either request a new token or do nothing.
// Check if session is valid based on timestamp
if (Number(currentTimestamp) + 5000 >= Number(userSession)) {
// Session is valid, do nothing.
return;
} else {
// Get new token and save in storage
return;
}
}
Пример вызова API (в моем сервисе несколько типов вызовов)
getValuations(): Observable<Valuation[]> {
this.checkToken(); // This function has to run (and complete) first before continue.
//The issue now is that the function below is executing at the same time as
checkToken()
return this.http.get<Valuation[]>();
}
Здесь я использую данные.
this.apiService.getValuations(this.Taxid).subscribe(res => {
});
Я ожидаю, что функция checkToken запустится первой и продолжит работу с функцией getValuations. Но очевидно, что они выполняются одновременно, что приведет к выполнению вызова API с недействительным токеном.