Observable.forkJoin et argument de tableau
dans la documentation de Forkjoin Observables, il est dit que args peut être un tableau mais il ne donne pas d'exemple le faisant:
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/forkjoin.md
j'ai essayé une fonction similaire à ce que j'ai énuméré (ci-dessous) mais est venu avec une erreur:
:3000/angular2/src/platform/browser/browser_adapter.js:76
EXCEPTION: TypeError: Observable_1.Observable.forkJoin is not a function
une version cisaillée de ma fonction ci-dessous:
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 racine de ma question est liée à une boucle pour finir avant de procéder comme demandé ici: Angular2 Observable - comment attendre que tous les appels de fonction dans une boucle pour finir avant de procéder?
mais je n'ai pas entièrement maîtrisé l'utilisation correcte de forkJoin avec un tableau et la bonne syntaxe pour le faire.
je vous suis très reconnaissant de l'aide que vous pourriez offrir.
NOTE: EXEMPLE DE TROISIÈME FONCTION QUI RENVOIE UNE 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()
}
1 réponses
vous devez importer des opérateurs qui ne sont pas chargés par défaut. C'est ce que EXCEPTION Observable.xxxx is not a function
signifie habituellement. Vous pouvez soit importer tous les opérateurs en ajoutant rxjs
complet à votre bootstrap, par exemple:
import 'rxjs/Rx'
ou en important des opérateurs spécifiques, dans votre cas:
import 'rxjs/add/observable/forkJoin'
autre observation / suggestion à propos de votre code: essayez de vous en tenir à une syntaxe. Vous mélangez es5, es6, dactylographié... et tandis qu'il travaille, il ça ne fera que t'embrouiller à long terme. Aussi, si vous commencez avec des Observables, essayez d'éviter new Observable()
et utilisez plutôt des opérateurs de création;
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()
}
enfin, référez - vous à la documentation correcte-Angular2 utilise RxJS v5 et le lien que vous avez fourni est pour RxJS v4. Les Docs sont encore incomplets pour v5, mais vous pouvez trouver des descriptions dans de nombreux fichiers source.