Поскольку ваша функция userLoggedIn()
выполняет HTTP-вызов, эта функция должна выполняться асинхронно (завершается через некоторое время).
Подсказка: Чтобы лучше понять sync vs async
, пожалуйста, просмотрите обратные вызовы, асинхронность / ожидание, обещания, наблюдаемые.
Ответ:
userLoggedIn(): Observable<boolean>{
// Make sure this is sync or need to be chained with the observable below
const token = this.getLocalToken();
if(!token){
return of(false);
} else {
return this.httpReq.verifyToken(token).pipe(
// Use the tap operator to update some inner class variable
tap((res) => this.userIsLoggedIn = res.tokenValid)
// We do have the response, if there is ok you can return true. You can add additional validations.
switchMap((res) => res ? of(true) : of(false)),
// Catch errors, do something with them
catchError((err) => of(false))
)
}
}
Малый глоссарий:
из : создает новую наблюдаемую предоставленный параметр
tap : не влияет на поток, может выполнять операции без побочных эффектов с ответом
switchMap : аналогично .then(() => new Promise()
... и, наконец, вызовите функцию как:
userLoggedIn().subscribe(isLoggedIn => console.log(isLoggedIn);