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, прежде чем моя система сможет продолжить работу? 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