angular - example - Observable.forkJoin y argumento de matriz
httpclient service angular 5 (1)
Es necesario importar operadores que no están cargados de forma predeterminada. Eso es lo que EXCEPTION Observable.xxxx is not a function
usualmente significa. Puede importar todos los operadores agregando rxjs
completos 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 acerca de su código: intente mantener una sintaxis. Está mezclando es5, es6, mecanografiado ... y mientras esté funcionando, solo lo confundirá a largo plazo. Además, si recién está comenzando con Observables, intente evitar el 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 aún están incompletos para v5, pero puede encontrar descripciones en muchos de los archivos de origen.
En la documentación de ForkJoin de Observables, dice que args puede ser una matriz pero no muestra un ejemplo al hacerlo:
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 la finalización de un bucle antes de continuar como se pregunta aquí: Angular2 Observable: ¿cómo esperar a que terminen todas las llamadas de función 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 OBSERVABLE
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()
}