Заметный.аргумент forkJoin и массива

в документации Observables forkJoin говорится, что args может быть массивом, но он не перечисляет пример, делающий это:

https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/forkjoin.md

я попробовал функцию, похожую на то, что я перечислил (ниже), но придумал ошибку:

:3000/angular2/src/platform/browser/browser_adapter.js:76 

EXCEPTION: TypeError: Observable_1.Observable.forkJoin is not a function

срезанная версия моей функции ниже:

processStuff( inputObject ) {
  let _self = this;

  return new Observable(function(observer) {
    let observableBatch = [];

    inputObject.forEach(function(componentarray, key) {
      observableBatch.push(_self.http.get(key + '.json').map((res: Response) => res.json()));
    });

    Observable.forkJoin(
      observableBatch
    // );
    ).subscribe(() => {
      observer.next();
      observer.complete();
    });

  });
}

корень моего вопроса связан с циклом to конец, прежде чем продолжить, как спрашивается здесь:Angular2 Observable-как дождаться завершения всех вызовов функций в цикле, прежде чем продолжить?

но я не полностью освоил правильное использование forkJoin с массивом и правильным синтаксисом для этого.

Я очень благодарен за помощь, которую вы могли бы предложить.

ПРИМЕЧАНИЕ: ПРИМЕР ТРЕТЬЕЙ ФУНКЦИИ, КОТОРАЯ ВОЗВРАЩАЕТ НАБЛЮДАЕМЫЙ

thirdFunction() {
  let _self = this;

  return Observable.create((observer) => {
  // return new Observable(function(observer) {
    ...

    observer.next(responseargs);
    observer.complete();
  });
}

processStuff(inputObject) {
  let _self = this;
  let observableBatch = [];

  inputObject.forEach((componentarray, key) => {
    observableBatch.push(_self.thirdFunction().map((res: Response) => res.json()));
  });

  return Observable.forkJoin(observableBatch);
}

elsewhere() {
  this.processStuff(inputObject)
    .subscribe()
}

1 ответов


необходимо импортировать операторы, которые не загружены по умолчанию. Вот что!--3--> обычно означает. Вы можете импортировать все операторы, добавив complete rxjs к вашему бутстрапу, например:

import 'rxjs/Rx'

или путем импорта определенных операторов, в вашем случае:

import 'rxjs/add/observable/forkJoin'

еще одно замечание / предложение о вашем коде: попробуйте придерживаться одного синтаксиса. Вы смешиваете es5, es6, typescript... и пока он работает, он только запутает вас в долгосрочной перспективе. Кроме того, если вы только начинаете с наблюдаемых, старайтесь избегать new Observable() и вместо этого используйте операторы создания;

processStuff( inputObject ) {
  let observableBatch = [];

  inputObject.forEach(( componentarray, key ) => {
    observableBatch.push( this.http.get( key + '.json').map((res: Response) => res.json()) );
  });

  return Observable.forkJoin(observableBatch);
}

elsewhere() {
  this.processStuff( inputObject )
    .subscribe()
}

наконец, обратитесь к правильной документации-Angular2 использует RxJS v5 и ссылка, которую вы предоставили, предназначена для RxJS v4. Документы по-прежнему являются неполными для v5, но вы можете найти описания во многих исходных файлах.