J'essaie d'améliorer ma connaissance de Angular2 en migrant une application actuellement écrite en Angular1
Une caractéristique en particulier m'a laissé perplexe. J'essaie de reproduire une fonction dans laquelle une fonction appelante attend jusqu'à ce que la fonction qu'elle appelle ait terminé une boucle de promesses. Dans angular une des fonctions que j'appelle ressemble en gros à 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 également une promesse et stocke toutes ces promesses dans un tableau.
Avec Angular1, lorsque j'appelle processStuff dans une autre fonction, je pouvais compter sur le système en attendant que ProcessStuff soit terminé avant d'entrer dans le code du bloc en question. C'EST À DIRE:
service.processStuff( arraying, parentidarg )
.then(function( data ) {
...
L'appelant de processStuff
attend que tous les invocations de doMoreStuff
se terminent jusqu'à ce que l'appelant de processStuff
entre dans son bloc d'alors.
Je ne sais pas comment y parvenir avec Angular2 et Observables. Je peux voir dans ces articles que, pour imiter les promesses, Observables utilise simplement abonnement au lieu de:
angulaire 1.x $ q à Angular 2.0 bêta
Mais comment puis-je attendre que tous les appels de la boucle forEach
soient terminés avant que mon système puisse continuer?
Je fais ça 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]});
Quelques informations supplémentaires ici: http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http