javascript - observables - subscribe angular 6



Angular2 observable: ¿cómo esperar a que terminen todas las llamadas de función en un bucle antes de continuar? (1)

He estado haciendo esto con 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]});

Más información aquí: http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

Estoy tratando de mejorar mi conocimiento de Angular2 al migrar una aplicación actualmente escrita en Angular1

Una característica en particular me ha dejado perplejo. Estoy tratando de replicar una función donde una función de llamada espera para continuar hasta que la función a la que llama haya completado un ciclo de promesas. En angular one la función que estoy llamando se ve básicamente así:

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);
}; 

Contiene un bucle forEach que llama a otra función (doMoreStuff) que también devuelve una promesa y almacena todas las promesas devueltas en una matriz.

Con Angular1, cuando llamo a processStuff en otra función, puedo contar con que el sistema esperará hasta que processStuff se complete antes de ingresar el código en el bloque de entonces. ES DECIR:

service.processStuff( arraying, parentidarg )
       .then(function( data ) {
              ... 

La persona que llama a processStuff espera a que todas doMoreStuff invocaciones de doMoreStuff completen hasta que la persona que llama a processStuff entre en su bloque de entonces.

No estoy seguro de cómo lograr esto con Angular2 y Observables. Puedo ver en estas publicaciones que para imitar las promesas, los Observables básicamente solo usan suscribirse en lugar de:

Angular 1.x $ q para Angular 2.0 beta

Pero, ¿cómo espero a que todas las invocaciones en el ciclo forEach completen antes de que mi sistema pueda continuar?