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?

27
demandé sur Community 2016-02-23 04:05:07

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

60
répondu TGH 2017-05-16 16:39:25