簡體   English   中英

為什么在這個ngrx例子中有必要使用until?

[英]Why takeUntil is necessary in this ngrx example?

在此rxjs例子 ,一個takeUntil在使用switchMap部。 我刪除了它,並且可觀察的工作正常。

為什么在這個例子中需要takeUntilnextSearch$

@Injectable()
export class BookEffects {

  @Effect()
  search$: Observable<Action> = this.actions$
    .ofType(book.ActionTypes.SEARCH)
    .debounceTime(300)
    .map(toPayload)
    .switchMap(query => {
      if (query === '') {
        return empty();
      }

      const nextSearch$ = this.actions$.ofType(book.ActionTypes.SEARCH).skip(1);

      return this.googleBooks.searchBooks(query)
        .takeUntil(nextSearch$)
        .map(books => new book.SearchCompleteAction(books))
        .catch(() => of(new book.SearchCompleteAction([])));
    });

    constructor(private actions$: Actions, private googleBooks: GoogleBooksService) { }
}

此處的takeUntil用於將GoogleBooksService.searchBooks()返回的Observable轉換為新的Observable,如果輔助observable發出任何內容(用戶的新搜索請求操作,通過外觀,將會中斷(即過早完成)) it)在searchBooks返回結果之前,有效地防止訂閱永遠觸發。 如果searchBooks背后的http請求在用戶發出新請求之前完成,那么它也將沒有區別,這也將完成observable,但僅觸發訂閱之后。 這應該是95%的情況。

takeUntil等待直到第二個Observable發出一些東西(這里這將是用戶的下一個 SEARCH動作,我假設, 當前的一個被跳過使用skip(1) )然后關閉Observable,在它之前銷毀它的訂閱被觸發,可能是因為新的BookEffects被實例化以處理新的搜索。

免責聲明:我沒有查看所有應用程序的源代碼,因此其中一些是猜測,但我相信它至少會朝着正確的方向發展。

暫無
暫無

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

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