【发布时间】:2016-06-04 15:55:56
【问题描述】:
我正在尝试通过迁移当前用 Angular1/AngularJS 编写的应用程序来提高我对 Angular2 的了解。
特别是一个功能让我很难过。我正在尝试复制一个功能,其中调用函数等待继续,直到它调用的函数完成了一个承诺循环。在 AngularJS 中,我调用的函数基本上是这样的:
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),该函数也返回一个 Promise,并将所有返回的 Promise 存储在一个数组中。
使用 AngularJS,当我在另一个函数中调用 processStuff 时,我可以指望系统等到 processStuff 完成后再进入 then 块中的代码:
service.processStuff( arraying, parentidarg )
.then(function( data ) {
...
processStuff 的调用者等待所有doMoreStuff 调用完成,直到processStuff 的调用者进入其then 块。
我不确定如何使用 Angular2 和 Observables 来实现这一点。我从这些帖子中可以看出,为了模仿 promise,Observables 基本上只是使用 subscribe() 而不是 then():
Angular 1.x $q to Angular 2.0 beta
但是我如何等待forEach 循环中的所有调用完成,然后我的应用程序才能继续执行?
【问题讨论】:
标签: javascript angular observable angular-promise