Angular2 Observable - comment attendre la fin de tous les appels de fonction dans une boucle avant de procéder?
j'essaie d'améliorer mes connaissances D'Angular2 en migrant une application actuellement écrite en Angular1
une caractéristique en particulier m'a étonné. J'essaie de répliquer une fonctionnalité Où une fonction d'appel attend pour procéder jusqu'à ce que la fonction qu'elle appelle ait terminé une boucle de promesses. Dans angulaire d'une fonction que j'appelle ressemble fondamentalement à ceci:
this.processStuff = function( inputarray, parentnodeid ) {
var promises = [];
var _self = this;
angular.forEach( inputarray , function( nodeid ) {
switch ( parentnodeid )
{
case ‘AAA’ : var component = _self.doMoreStuff( nodeid, parentnodeid ); break;
case ‘BBB’ : var component = _self.doMoreStuff( nodeid, parentnodeid ); break;
case ‘CCC’ : var component = _self.doMoreStuff( nodeid, parentnodeid ); break;
default : var component = null;
}
promises.push( component );
});
return $q.all(promises);
};
il contient une boucle forEach qui appelle une autre fonction (doMoreStuff) qui renvoie aussi une promesse et stocke toutes les promesses retournées dans un tableau.
avec Angular1, quand j'appelle processtuff dans une autre fonction, je pouvais compter sur le système en attente jusqu'à ce que processtuff terminé avant d'entrer dans le code dans le bloc puis. C'est à dire:
service.processStuff( arraying, parentidarg )
.then(function( data ) {
...
L'appelant processStuff
attend tous doMoreStuff
les invocations à remplir jusqu'à ce que l'appelant de processStuff
entre dans son bloc.
Je ne sais pas comment y parvenir avec Angular2 et Observables. Je peux voir à partir de ces messages que pour imiter des promesses, Observables essentiellement juste utiliser souscrire au lieu de puis:
Angle 1.x $q Angulaire 2.0 beta
mais comment puis-je attendre que toutes les invocations de la boucle forEach
soient terminées avant que mon système puisse continuer?
1 réponses
je l'ai fait avec forkJoin
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';
Observable.forkJoin(
this.http.get('./friends.json').map((res: Response) => res.json()),
this.http.get('./customer.json').map((res: Response) => res.json())
)
.subscribe(res => this.combined = {friends: res[0].friends, customer: res[1]});
plus d'infos ici: http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http