Вы делаете это неправильно. this.users
обновляется с помощью observables
. Таким образом, если вы попытаетесь получить его значение до его обновления, вы не получите его, как ожидалось. Вы можете назвать это, как показано ниже,
retrieveUser(){
this.restProvider.retrieveUser(this.emailAdd, this.pw)
.subscribe(listUser => {
this.users = userList.results //trying to store to users variable
callYourMethodWithUpdatedValue(this.users); // <-- Pass value here
},
err => {
console.log(err);
},
() => console.log('success')
);}
callYourMethodWithUpdatedValue
вызывается каждый раз (и как только) значение this.users
обновляется
Обновление 1
Вы не можете получить асинхронное значение одним методом и ожидать, что это значение будет использоваться другим методом при нажатии кнопки. Причина в том, что вы ожидаете значение при нажатии этой кнопки, но, поскольку он является вызовом async
(может занять n
сек), вы не можете быть уверены, что значение будет заполнено, когда значение будет использовано при некотором вызове кнопки ,
Это неправильная реализация. Вам нужно изменить архитектуру на одну из следующих:
Не направлять на эту страницу, если значение user
не было разрешено (получено). Проверьте canActivate
и canActivateChildren
.
Измените UX, в котором вы пытаетесь получить переменную использования async
при нажатии кнопки, и активируйте кнопку после получения значения (Здесь вы можете использовать Subject
). Примерно так: