![](/img/trans.png)
[英]Rxjs using Observable.from() string and prevent Observable being created many times
[英]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
。 這些類型包括:
您還可以找到特定的轉換器,例如fromArray
和fromPromise
專門轉換這些類型,但更多的是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.