2017-08-01 12 views
2

私はBehaviorSubjectを返す関数を持っていますが、データを使用しようとすると関数から戻ってきますが、すべてのデータが戻ったらそれを使う必要があります。BehaviorSubjectが完了したらデータ?完了後にBehaviorSubjectからデータを取得するには?

私は.finallyを使用しようとしましたが、決して呼び出されません。ここで私が使用しているコードです。添付

getData() { 
    let guideList = ''; 
    this.getChildren(event.node) 
     .subscribe(
     function(data) { 
      console.log('here'); 
      guideList = data.join(','); 
     }, 
     function(err) { 
      console.log('error'); 
     }, 
     function() { 
      console.log('done'); 
      console.log(guideList); 
     } 
    ); 
} 

getChildren(node: TreeNode) { 
    const nodeIds$ = new BehaviorSubject([]); 
    //doForAll is a promise 
    node.doForAll((data) => { 
    nodeIds$.next(nodeIds$.getValue().concat(data.id)); 
    }); 
    return nodeIds$; 
} 

にconsole.logのスクリーンショットであるenter image description here

+1

はあなたが使用して試すことができます '.onCompleted()'行動主体のを –

+0

あなたは最後の要素ではあるチェックしようとすることができますあなたの 'data'配列とBehaviourSubjectの' .onComplete() 'メソッドを呼び出した後 –

+0

私は呼び出しを購読した後に.onCompletedを呼び出すでしょうか? – Ennio

答えて

2

最も簡単な方法は、単に、アレイ内のすべてのデータを収集し、データだけが全て収集されるとnextを呼び出すことです。さらに良い:主題を全く使わないでください。 1つは主題を作成する必要が非常にまれです。多くの場合、人々は、彼らがより合理的に観察ファクトリメソッドや演算子使用しなければならない代わりに、被験者を使用します。

getChildren(node: TreeNode) { 
    return Observable.defer(() => { 
    const result = []; 
    return node.doForAll(d => result.push(d.id)).then(() => result); 
    }); 
} 
関連する問題