Генератор событий не отправляет событие по HTTPResponse - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь поделиться состоянием флага fileUploadInProgress из дочернего компонента в родительский компонент, используя привязку событий.

Начальное состояние флага ложно. Когда я отправляю запрос, я устанавливаю флаг в true и при получении правильного ответа устанавливаю его обратно в false, используя Eventemitter.emit ($ event)

Странно, первое событие отправляется, а второе - нет.

Я пытался создать это событие внутри setTimeout до первого события, и оно не работает. Я предполагаю, что это связано с тем, как работают циклы событий, но я не совсем уверен, почему.

Функция Uploadfiles в дочернем компоненте

  uploadFiles(content) {
    this.uploadInProgressEvent.emit(true); // works
    setTimeout(() => {
      this.uploadInProgressEvent.emit(false); // doesn't work
    }, 0)
    this.restClient.uploadUserFiles(content)
      .subscribe((event) => {
        this.uploadInProgressEvent.emit(false); // works

        if (event.type === HttpEventType.UploadProgress) {
          this.uploadInProgressEvent.emit(false); // doesn't work
        } else if (event instanceof HttpResponse) {
          this.uploadInProgressEvent.emit(false); // doesn't work
        }
      });
  }

Вот как я использую привязку событий в родительском компоненте

<parent-component>
(uploadInProgressEvent)="logg($event)"
</parent-component>

Функция logg в основном записывает true / false независимо от того, что получено. На консоли печатаются только комментарии, помеченные // работами.

Я ожидаю, что источник событий всегда будет выдавать значение. Любые идеи о том, как я могу это исправить, приветствуются.

...