Angular2 Observable-как дождаться завершения всех вызовов функций в цикле, прежде чем продолжить?
Я пытаюсь улучшить свои знания Angular2 путем миграции приложения, написанного в настоящее время на Angular1
одна особенность, в частности, поставила меня в тупик. Я пытаюсь реплицировать функцию, где вызывающая функция ждет продолжения, пока вызываемая функция не завершит цикл обещаний. В angular one функция, которую я вызываю, выглядит в основном так:
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. Т. е.:
service.processStuff( arraying, parentidarg )
.then(function( data ) {
...
абонент processStuff
ждет всех doMoreStuff
вызовы для завершения до вызывающего processStuff
входит в ее блок.
Я не уверен, как достичь этого с Angular2 и Заметный. Из этих сообщений я вижу, что для имитации обещаний наблюдаемые в основном просто используют subscribe вместо then:
Угловое 1.x $q в 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