#angular #typescript #angular8
#angular #typescript #angular8
Вопрос:
У меня есть функция getData() в AccountService.ts. Я пытаюсь собрать данные пользователя и данные учетной записи пользователя вместе в zip promise. Разрешение работает правильно, и я получаю правильные данные, но когда я пытаюсь присвоить этим локальным переменным возвращаемые значения, они всегда не определены. Я хочу настроить их на использование в других функциях.
getData(){
zip(this.getUser(), this.getAccount()).toPromise().then(data =>{
this.user = data.values[0];
console.log(this.user);
this.account = data.values[1];
resolve(data.values[0],data.values[1]);
});
}
Я использую Angular 8 с typescript.
Спасибо
Комментарии:
1. Вероятно, нам понадобится дополнительная информация. Я вижу
resolve
метод, но неясно, что он там делает. Кроме того, javascript является асинхронным языком, что означает, что код выполняется только сверху вниз в одном и том же контексте. Как только вы используетеObservables
или что-либо асинхронное, код под наблюдаемым оператором выполняется перед ним. Например, может случиться так, что вы возвращаете переменную, которая еще не была установлена, потому что она будет установлена позже, когда наблюдаемое завершится, но тогда функция уже вернулась..
Ответ №1:
Ваша функция getData()
, похоже, не возвращает значений. Я бы следовал приведенному ниже подходу
getData(){
return zip(this.getUser(), this.getAccount()).pipe(
tap(data => {
this.user = data.values[0];
this.account = data.values[1];
}),
map(({user, account}) => ({user, account}))
)
}
Теперь мы возвращаем Observable<{user: any, account: any}>
. В компоненте, где используется эта функция, мы можем получить доступ к значениям с помощью subscribe
ngOnInit() {
this.accountService.getData().subscribe({
next: data => {
// access account using data.account and user using data.user
}
})
}