Я пытаюсь улучшить свои знания Angular2, перенеся приложение, написанное на данный момент в Angular1
Одна особенность, в частности, меня озадачила. Я пытаюсь реплицировать функцию, в которой вызывающая функция ожидает выполнения до тех пор, пока вызывающая функция не завершит цикл из promises. В angular одна функция, которую я вызываю, выглядит в основном так:
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), которая также возвращает обещание, и хранит все возвращенные promises в массиве.
С помощью Angular1, когда я вызываю processStuff в другой функции, я могу рассчитывать на систему, ожидающую завершения процесса processStuff до ввода кода в тот же блок. IE:
service.processStuff( arraying, parentidarg )
.then(function( data ) {
...
Вызывающий processStuff
ожидает завершения всех вызовов doMoreStuff
до тех пор, пока вызывающий объект processStuff
не войдет в свой блок then.
Я не уверен, как это сделать с помощью Angular2 и Observables. Я могу видеть из этих сообщений, что для имитации promises, Observables в основном просто используют подписку вместо этого:
Angular 1.x $q до angular 2.0 beta
Но как мне ждать завершения всех вызовов в цикле forEach
до того, как моя система сможет продолжить?