Да, вы правы, это связано с асинхронным вызовом.
Существует несколько способов решения этого случая.
Самый простой способ - работать с переменной внутри подписки. Здесь вы можете очистить хранилище или перейти пользователя по другой ссылке. Например:
onSubmit() {
this.basicAuthenticationService.existUser(this.registerForm.value.username).subscribe(
(data: boolean) => {
this.existuser = data;
// WORK HERE WITH DATA
// local Storage cleaning
// navigation to login page
});
2-й вариант, если вам нужно запустить еще один http-вызов, вы можете делать все в потоке, просто используя pipe и оператор switchMap / mergeMap / concatMap.
this.basicAuthenticationService.existUser(this.registerForm.value.username)
.pipe(switchMap(data) => {
return nextHttp.call()
})
.subscribe(....)