Как ждать вызова метода, пока не сработают наблюдатели? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть несколько наблюдаемых функций:

function a(): Observable<any> {
}

function b(): Observable<any> {
}

После того, как я присоединяю эти наблюдаемые к одному:

   let awaitingObservers = [a(), b()];

public getObservables() {
    forkJoin(awaitingObservers).subscribe(results => {
      return results;
    });
  }

Итак, последняя функция, которую я вызываю:

function start() {

    if (this.currentForm().functions) {
          this.currentForm().functions.iterate();
          this.currentForm().functions.getObservables();
        }

        /* Return next form */

        this.current = nextForm;

    }

Эта функция проверяет, выходит ли какой-либо наблюдаемый метод для вызова, затем вызывает затем this.currentForm().functions.iterate();

После подписки их на линии: this.currentForm().functions.getObservables();.

Как подождать этого процесса и не делать, пока все наблюдаемые возвращают результат, только затем вызвать: this.current = nextForm;?

Моя проблема:

  • Если существует список наблюдаемых, вызывайте их, только затем выполните строку: this.current = nextForm;

1 Ответ

0 голосов
/ 04 июля 2018

Я бы направил ваш разветвленный поток дальше к функции запуска

public getObservables():Observable<[X,Y]>{
    return forkoin(awaitingObservers);
}

и затем дождитесь результата, где вы хотите его обработать

функция start () {

if (this.currentForm().functions) {
      this.currentForm().functions.iterate();
      this.currentForm().functions.getObservables().subscribe( data => this.current = nextForm)
    }
}

Почему я так сделал? Метод "getObservables" - это просто удобный метод для разветвления. Это не настоящий процессор данных. Процессор результата находится в вашей функции «запуска». И я думаю, что процессор должен всегда отвечать за запуск подписки. Из-за этого я бы сделал подписку в функции запуска.

С уважением

...