Observable.forkJoin y argumento de matriz


En la documentación de Observables forkJoin, dice que args puede ser una matriz, pero no enumera un ejemplo que lo hace:

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

He intentado una función similar a la que enumeré (a continuación) pero se me ocurrió un error:

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

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

Una versión esquilada de mi función a continuación:

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();
    });

  });
}

La raíz de mi pregunta está relacionada con un bucle para terminar antes de proceder como se pide aquí: Angular2 Observable - ¿cómo esperar a que terminen todas las llamadas a funciones en un bucle antes de continuar?

Pero no he dominado completamente el uso correcto de forkJoin con una matriz y la sintaxis correcta para hacerlo.

Estoy muy agradecido por la ayuda que podría ofrecer.

NOTA: EJEMPLO DE TERCERA FUNCIÓN QUE DEVUELVE UN

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()
}
Author: Sonicd300, 2016-02-28

1 answers

Necesita importar operadores que no están cargados por defecto. Eso es lo que EXCEPTION Observable.xxxx is not a function generalmente significa. Puede importar todos los operadores agregando complete rxjs a su bootstrap, por ejemplo:

import 'rxjs/Rx'

O importando operadores específicos, en su caso:

import 'rxjs/add/observable/forkJoin'

Otra observación/sugerencia sobre su código: intente atenerse a una sintaxis. Estás mezclando es5, es6, typescript... y mientras esté funcionando solo te confundirá a largo plazo. Además, si estás empezando con Observables, intente evitar new Observable() y use operadores de creación en su lugar;

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()
}

Finalmente, consulte la documentación correcta: Angular2 usa RxJS v5 y el enlace que proporcionó es para RxJS v4. Los documentos todavía están incompletos para la v5, pero puede encontrar descripciones en muchos de los archivos fuente.

 59
Author: Sasxa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-01 20:11:18