Угловая 7 «неопределенная» переменная - PullRequest
0 голосов
/ 10 апреля 2019

Возможно ли прослушивание абонентской функции извне?

x:string;
listenertwitchService(){
     console.log(this.x);
}

this.twitchService.getUserID(this.Tw_Username).subscribe(data => {
     this.x="123";
});

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Если вы 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)
0 голосов
/ 10 апреля 2019

Это нормальное поведение:

1) Ваш x не определен

x: строка;

//should be
x = '';

2) Наблюдаемыеработать асинхронно, что означает, что если вы хотите использовать возврат x через this.twitchService.getUserID(this.Tw_Username), вам нужно использовать канал и операторы rxjs, потому что попытка получить доступ к глобальной переменной, значение которой установлено асинхронно, не является хорошей идеей, так как трудно узнать значениех будет установлен, т.е. когда ваш 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...