Angular: глобальная переменная не изменяется внутри функции подписки - PullRequest
1 голос
/ 26 апреля 2019

У меня проблемы с изменением глобальной переменной в Angular 7 с использованием TypeScript.

Я использую сервис, который собирает данные JSON из базы данных через Restful API

Услуга:

export class myService {
  constructor(private client : HttpClient) { }

  dossierSubject = new Subject();
  private dossiers : any[];

  getExtract(){
    this.client.get<any[]>('http://localhost:9090/dossiers')
    .subscribe(
      (response) => {
        console.log("Data acquisition in progress");
        this.dossiers = response;
        this.emitDossierSubject();
        console.log('Received data ' + response);
      },
      (error) => {
        console.log('Error ! : ' + JSON.stringify(error));
      }
    );
  }

   emitDossierSubject(){
    this.dossierSubject.next(this.dossiers.slice());
  }

MyService работает хорошо, и я могу получить данные, которые я ищу, затем я вызываю службу в компонент

Компонент

 export class tabComponent implements OnInit {

  constructor(private dossierService : myService) { }

  private dossierSubscription : Subscription;
  private listeDossiers : any[];

  ngOnInit() {
    this.spinnerStatus = true;
    this.dossierService.getExtract();
    this.dossierSubscription = this.dossierService.dossierSubject.subscribe(
      (dossiers : any[]) => {
        this.listeDossiers = dossiers;
        console.log(listeDossiers); //dossiers [object][object]
        this.spinnerStatus = false;
      }
    );
    console.log('Received data : '+ this.listeDossiers);  //undefined
  }

Пожалуйста, я хотел бы знать, почему моя глобальная переменная "listeDossiers" изменяется только внутри функции подписки.

Я попытался использовать тему для "listeDossier" и обновить ее только после того, как я изменил переменную внутри подписки, но безуспешно.

Спасибо за вашу помощь.

1 Ответ

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

Я считаю, что console.log(listeDossiers); должно быть console.log(this.listeDossiers);

И будет вызываться console.log вне subscribe, но он не будет ждать http-запроса, вы пытаетесь распечатать его как часть функции ngOnInit() без ожидания, однако это только в пределах subscribe что вы на самом деле назначаете это

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