簡體   English   中英

推至可觀察到的角度

[英]Push to observable in angular

我有一個similarIdeasObservable: Observable<SimilarIdea[]>; Observable的Observable數組: similarIdeasObservable: Observable<SimilarIdea[]>; 和含有10行和綁定到HTML <article class="list-group-item" *ngFor="let similarIdea of (similarIdeasObservable | async)">現在我想進一步10行推入similarIdeasObservable: Observable<SimilarIdea[]>; 通過使用以下方法

  onScrollDown(): void {
    this.loading = true;
    if (this.idea !== null) {
      this.loading = true;
      concat(this.similarIdeasObservable, this.ideaService.getSimilarIdeas(this.idea).pipe(
        concatMap(i => i),
        toArray(),
        catchError(error => {
          this.loading = false;
          return throwError(error);
        }),
        finalize(() => {
          this.loading = false;
        })
      )).subscribe(data => {
        console.log(data);
      });
    }
  }

前10個想法已加載以下代碼

this.similarIdeasObservable = this.ideaService.getSimilarIdeas(idea).pipe(
            concatMap(i => i),
            startWith(idea.toSimilarIdea()),
            toArray(),
            catchError(error => {
              this.loading = false;
              return throwError(error);
            }),
            finalize( () => {
              this.loading = false;
            })
          );

以上方法無效。 您能解決我下次如何將其推入Observable的問題嗎?

onScrollDown()函數中使用combineLatest運算符:

一個適合您的有效的stackblitz示例

this.similarIdeasObservable = combineLatest(this.similarIdeasObservable,this.ideaService.getSimilarIdeas(this.idea).pipe(...))
        //Merge 2 array returned from two above Observables
        .pipe(map(([first$, second$]) => [...first$, ...second$ ]) 

this.similarIdeasObservable.subscribe(data => {console.log(data);});

但是我注意到,如果您的onScroll()在應用程序中多次調用,可能會導致性能問題,當再次調用它時,您應該取消訂閱先前的訂閱:

onScrollDown(): void {
 if(this.scrollDownSubscriptions) {
    this.scrollDownSubscription.unsubscribe();
 }
 ........
 this.scrollDownSubscription = this.similarIdeasObservable.subscribe( ...);
}

對於rxjs 6+版本,

concat的工作方式如下:

import { concat } from 'rxjs';
concat(observable1, observable2, observable3 ...);

應該是這樣的:

concat(
    this.similarIdeasObservable,
    this.ideaService.getSimilarIdeas(this.idea).pipe(...)
)

參考: 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM