Angular2 Observable-как дождаться завершения всех вызовов функций в цикле, прежде чем продолжить?



Я пытаюсь улучшить свои знания Angular2, перенеся приложение, написанное в настоящее время на Angular1



Одна особенность, в частности, ставит меня в тупик. Я пытаюсь воспроизвести функцию, в которой вызывающая функция ожидает продолжения, пока вызываемая функция не завершит цикл обещаний. В угловых одну функцию я вызываю в основном выглядит так:

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


Он содержит цикл forEach, который вызывает другую функцию (doMoreStuff), которая также возвращает обещание и он хранит все возвращенные обещания в массиве.



С Angular1, когда я вызываю processStuff в другой функции, я могу рассчитывать на систему, ожидающую завершения processStuff, прежде чем вводить код в блок then. IE:



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


Вызывающий объект processStuff ожидает завершения всех вызовов doMoreStuff, пока вызывающий объект processStuff не войдет в свой блок then.



Я не уверен, как достичь этого с Angular2 и наблюдаемых. Я вижу по этим постам, что передразнивать обещает, наблюдаемых в основном только подписаться, а не тогда:



Угловой 1.x $q to Angular 2.0 beta



Но как мне дождаться завершения всех вызовов в цикле forEach, прежде чем моя система сможет продолжить работу?
639   1  

1 ответ:

Я делал это с 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]});

Еще немного информации здесь: http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

Comments

    Ничего не найдено.