簡體   English   中英

RxJS:Observable.create() 與 Observable.from()

[英]RxJS: Observable.create() vs. Observable.from()

這兩者有什么區別?

return Observable.create(function(observer) {
    if (array)
        observer.next([]);
    else
        observer.next(null);
    observer.complete();
});

return Observable.from( array ? [] : null );

我認為它可能是一樣的,但沒有一樣工作。

create(...)是用於創建Observable的通用Observable工廠方法,您將在其中明確規定如何將值傳遞給Subscriber

例如,如果您要創建一個基於計時器的Observable (它是否已經作為Observable.timer存在),您可以執行以下操作:

   Observable.create(observer => {
     const timeoutId = setTimeout(() => {
       observer.next(0);
       observer.complete();
     }, 500);

     return () => clearTimeout(timeoutId);
   });

from(...)是我所說的一致性運算符,因為它試圖將傳入的數據類型強制轉換為Observable (使其符合)。 這意味着它將接受各種類型並將它們轉換為Observables 這些類型包括:

  • 數組
  • 承諾
  • 發電機
  • 類似可觀察的事物

您還可以找到特定的轉換器,例如fromArrayfromPromise專門轉換這些類型,但更多的是from這些方法的瑞士軍刀

如果您只需要一個值,您應該使用Observable.of (文檔似乎已經過時,在 RxJS 5 中將just/return重命名為of ,我認為它們不再是別名了)。

IE

// Don't quote me on the import part
import 'rxjs/add/observable/of';

Observable.of(1, 2, 3, 4).subscribe();

一個區別是: Observable.from()特別禁止null作為它接受的東西。 所以第一個是創建一個返回null的可觀察的解決方法。 (不過,請參閱已接受的答案以了解主要區別。)

更好(更短)的方式是使用

return Observable.just( array ? [] : null );

但是我找不到從哪里獲取它或如何導入它。

import 'rxjs/add/operator/just';

這在我的 rxjs 發行版中不存在。
編輯: just重命名為of ,請參閱已接受的答案。

當您返回一個數組時,區別在於 'create/next' 將立即發出整個數組,而 'from' 將發出每個項目的長度與其長度一樣多,因此對於訂閱者,

Observable.create(observer => observer.next(myArray))將觸發 onNext 事件一次以返回 myArray 而Observable.from(myArray)將發出許多 onNext 事件以每次返回一個項目。

Observable.from():
您有一個值列表(與 Rx 無關),並且該列表中創建了一個 Observable。 當 Observer 訂閱此 Observable 時,值列表作為 Next() 事件一個一個地傳遞,然后 Completed() 最終傳遞,並且您無法控制此過程。

Observable.create():
您可以通過一個一個顯式地發出事件來創建事件序列。 因此,您可以隨時發出 OnCompleted 和 OnError 事件

暫無
暫無

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

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