2016-02-23 9 views
21

現在、Angular1で書かれているアプリケーションを移行することで、Angular2の知識を向上させようとしています。Angular2 Observable - 処理する前にループ内のすべての関数呼び出しが終了するのを待つ方法

特に私の特徴は私を困惑させています。呼び出し元の関数が呼び出している関数が一連の約束を完了するまで、呼び出し関数が処理を待つ機能を複製しようとしています。角度1での機能は、私は基本的に、このようなルックスを呼び出しています:

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

また約束を返し、それは、アレイ内のすべてのものを返された約束を保存する別の関数(doMoreStuff)を呼び出すforeachループが含まれています。

Angular1では、別の関数でprocessStuffを呼び出すと、thenブロックのコードを入力する前にprocessStuffが完了するまでシステムを待つことができました。 IE:

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

processStuffの発信者は、その次に、ブロックに入るまで、すべてdoMoreStuff呼び出しのprocessStuff待機の呼び出し元が完了します。

Angular2とObservablesでこれを達成する方法がわかりません。私は、約束を模倣するために、これらの記事から見ることができ観測は、基本的には、ちょうどその購読使いの代わり:

Angular 1.x $q to Angular 2.0 beta

をしかし、どのように私は私のシステムを進める前に完了するのforEachループ内のすべての呼び出しを待つのですか?私は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]}); 

とここにいくつかの詳細はこれをやってきた

答えて

50
+1

をforkJoinための引数は、配列することができますか? forループを使ってこの "配列"にデータを挿入する例を示してください。ループが新しいObservableブロックの内部または外部にあるかどうか、およびobserver.next()の使用方法はわかりません。およびobserver.complete(); –

+0

特定のインポート手順については、こちらを参照してください。http://stackoverflow.com/questions/34581471/angular2-http-is-missing-map-function/34581771#34581771 –

+1

はい、配列にすることができます:https:// github。 – msanford

関連する問題