#angular #angular7
#угловой #angular7
Вопрос:
Можно ли прослушивать функцию абонента извне?
x:string;
listenertwitchService(){
console.log(this.x);
}
this.twitchService.getUserID(this.Tw_Username).subscribe(data => {
this.x="123";
});
Комментарии:
1. вы получите undefined в своем журнале, потому что x не инициализирован.
2. Как она не инициализируется
3. вы только что указали тип x, а не значение инициализации, поэтому при регистрации оно будет неопределенным, и после регистрации ваш запрос будет выполнен, и x будет инициализирован.
Ответ №1:
Это нормальное поведение:
1) Ваш x не определен
x: строка;
//should be
x = '';
2) Наблюдаемые работают асинхронно, что означает, что если вы хотите использовать возвращаемый x, this.twitchService.getUserID(this.Tw_Username)
вам нужно использовать канал и операторы rxjs, потому что попытка получить доступ к глобальной переменной, значение которой задается асинхронно, не является хорошей идеей, поскольку трудно определить, будет ли установлено значение x, т.е. Когда вашObservable сработает. Однако для привязки шаблона весьма полезно привязать вашу глобальную переменную, учитывая, что вы установили начальное значение, см. (1)
this.twitchService.getUserID(this.Tw_Username)
.pipe(tap(data)=>{ //or any other operator ie map/switchMap etc...
//do the thing you want to do to the data
})
.subscribe()
для получения дополнительной информации: https://www.learnrxjs.io/operators /
Ответ №2:
Если вы console.log(this.x)
после subscribe
того, как она все еще не определена, потому subscribe
что вызов asynchronous
, он не будет ждать возврата данных getUserID
и запускать следующую строку кода
this.twitchService.getUserID(this.Tw_Username)
.subscribe(data => {
this.x="123";
});
//still undefined
console.log(this.x)