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