Rxjs 6: 소스 스트림을 멀티 스트림으로 분기시키기

from()의 스트림 데이터는 http.get()의 Observable 로 대체 할 수 있음

  getStreams(meta$:Subject, nodes$:Subject, edges$:Subject) {
    console.log( 'http get => stream2' );

    from(GRAPH_STREAM).subscribe({
      next: x => {
          if( x.hasOwnProperty('group') ){
            switch( x['group'] ){
              case 'nodes': nodes$.next(x); break;
              case 'edges': edges$.next(x); break;
              case 'meta': meta$.next(x); break;
            }
          }
      },
      error: e => console.log( 'ERROR: getStreams()', e.hasOwnProperty('message') ? e.message : e ),
      complete: () => {
        nodes$.complete();
        edges$.complete();
        meta$.complete();
      }
    });
  }

용도별로 3개의 스트림을 만들고, concat 으로 순서가 보장된 처리 수행
유틸성으로 ready$ 함수 스트림을 넣어서 작업전 준비단계를 수행

  loadStreams(){
    let ready$ = of(()=>{
      console.log( 'ready function' );
      this.toggleProgress(true);
    });

    let meta$ = new Subject(), nodes$ = new Subject(), edges$ = new Subject();
    nodes$.subscribe( x => this.canvas.add(x) );
    edges$.subscribe( x => this.canvas.add(x) );
    meta$.pipe(
      tap(x => console.log( `sql : "${ x['summary']['sql'] }"` )),
      map(x => x['labels'] ), concatAll()
    ).subscribe( x => console.log( 'label:', x ) );
    
    concat( ready$, meta$.asObservable(), nodes$.asObservable(), edges$.asObservable() ).subscribe({
      next: x => {
        if( _.isFunction(x) ) x();
      },
      complete: () => {
        this.canvas.style(stylelist['dark']).update();
        this.canvas.fit( this.canvas.elements(), 30 );
        this.toggleProgress(false);
        console.log( 'completed!!' );
      }
    });

    this.graphService.getStreams( meta$, nodes$, edges$ );
  }

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: