Ожидайте завершения метода, прежде чем двигаться дальше в Angular - PullRequest
0 голосов
/ 25 июня 2018

У меня вопрос, мне нужно знать, как ждать завершения метода, прежде чем двигаться дальше.

У меня есть вызов по http get, в компоненте:

private minTimestamp: Date;
private maxTimestamp: Date;

ngOnInit(): void {
 this.getTimestamps();
 const filters: EventFilters = this.getFilters();
 this.dtOptions = this.eventsService.GetEvents(filters);
}

private getFilters(): EventFilters {
    console.log(this.selectedStartDate);
    console.log(this.selectedStartTime);
    return { FromTimestamp: new Date(`${this.selectedStartDate} ${this.selectedStartTime}`).toISOString(), ToTimestamp: new Date(`${this.selectedEndDate} ${this.selectedEndTime}`).toISOString()};
}

private getTimestamps() {
    this.eventsService.GetMinMaxTimestamp()
      .subscribe(
        result => {
          this.srcChannels = result;
          console.log('Src channels loaded');
        },
        error => {
          console.error(error);
          this.toastr.error('Fetching source channels filter failed');
        }
      );
  }

В обслуживании:

public GetMinMaxTimestamp(): Observable<TimestampBoundaries> {
    return this.http.get<TimestampBoundaries>(`${this.endpointsBaseUrl}GetMinMaxTimestamp`);
}

И теперь проблема в том, что GetEvents использует эти даты, а getTimestamps завершается позже, затем вызывается событие get и значения не определены. Есть ли способ?

1 Ответ

0 голосов
/ 25 июня 2018

Не знаю, зачем вам нужны метки времени, чтобы получить getEvents, потому что в соответствии с вашим кодом вам нужны фильтры для getEvents, а не метки времени.Но все же, если вам нужно вызвать его после получения меток времени, вот решение.

Решение состоит в том, чтобы вызывать getEvents после завершения getTimeStamps, а не вызывать его onInit.

private minTimestamp: Date;
private maxTimestamp: Date;

ngOnInit(): void {
 this.getTimestamps();
}

private getFilters(): EventFilters {
    console.log(this.selectedStartDate);
    console.log(this.selectedStartTime);
    return { FromTimestamp: new Date(`${this.selectedStartDate} ${this.selectedStartTime}`).toISOString(), ToTimestamp: new Date(`${this.selectedEndDate} ${this.selectedEndTime}`).toISOString()};
}

private getTimestamps() {
    this.eventsService.GetMinMaxTimestamp()
      .subscribe(
        result => {
          this.srcChannels = result;
          console.log('Src channels loaded');
          const filters: EventFilters = this.getFilters();
          this.dtOptions = this.eventsService.GetEvents(filters);
        },
        error => {
          console.error(error);
          this.toastr.error('Fetching source channels filter failed');
        }
      );
  }

Таким образом, вы получаете свои фильтры и вызываете getEvents после того, как получаете отметки времени

Дайте мне знать, если это работает для вас.

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