簡體   English   中英

如何訂閱一次可觀察對象?

[英]How to subscribe to an observable once?

我的 function access()每次調用都需要訂閱一次。

在下面的代碼片段中, $valueChanges為所做的每個更改發出數據。 在沒有const $ =...$.unsubscribe() ) 的情況下調用access() ) , $valueChanges observable 會發出不必要的值流。

是否有一個 rxjs 運算符/函數在 function 內的訂閱中發出一次? 即使 function 被多次調用,訂閱也會發出一次?

access() {
  const $ = $valueChanges.pipe(
    map((res) => 
      ...
    ),
  ).subscribe((res) => {

    ...

    $.unsubscribe();
  });
}

您可以考慮使用take()運算符,並在完成之前僅發出第一個值。

根據文檔take操作員

Emit provided number of values before completing.

這是您可以使用它的方式:

access() {
  valueChanges
    .pipe(
      map((res) => 
        ...
      ),
      take(1),
    ).subscribe((res) => {

      ...

    });
}

試試shareReply(1) 然后原始的 stream 將只被調用一次,它的發射將與所有訂閱者共享。 如果 stream 第二次發出 - 更新也將 go 發送給所有訂閱者。

access() {
  const $ = $valueChanges.pipe(
    map((res) => 
      ...
    ),
    // take(1), // in case if you need just 1 emit from it.
    shareReply(1), // in case if you don't want to trigger `$valueChanges` on every subscription.
  ).subscribe((res) => {

    ...

    // $.unsubscribe(); // it's useless in case of `take(1)`.
  });
}

暫無
暫無

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

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