これら2つの違いは何ですか?
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
(強制的に適合させる)に変換しようとする点で、conformance演算子と呼んでいます。これは、さまざまなタイプを受け入れ、それらをObservables
に変換することを意味します。これらのタイプは次のとおりです。
fromArray
やfromPromise
などの特定のコンバーターがあり、これらのタイプを具体的に変換しますが、from
これらのメソッドのスイスアーミーナイフの詳細
単一の値が必要な場合は、_Observable.of
_を使用する必要があります(ドキュメントは古くなっているようです。RxJS5では_just/return
_はof
に名前が変更されましたが、私はそれらを考えていませんもうエイリアスされます)。
つまり.
_// Don't quote me on the import part
import 'rxjs/add/observable/of';
Observable.of(1, 2, 3, 4).subscribe();
_
配列を返す場合、「create/next」は配列全体を一度に発行しますが、「from」は各アイテムをその長さの数だけ発行するので、サブスクライバーには、
Observable.create(observer => observer.next(myArray))
はonNextイベントを1回起動してmyArrayを返しますが、Observable.from(myArray)
は多くのonNextイベントを発行して毎回1つのアイテムを返します。
1つの違いは、Observable.from()
は、null
を受け入れるものとして具体的に禁止します。したがって、1つ目は、null
を返すオブザーバブルを作成するための一種の回避策です。 (ただし、主な違いについては、承認済みの回答を参照してください。)
より良い(短い)方法は just を使用することです:
return Observable.just( array ? [] : null );
しかし、それを入手する場所やインポート方法を見つけることができませんでした。
import 'rxjs/add/operator/just';
これは私のrxjsのディストリビューションにはありません。
編集:just
はof
に名前が変更されました。承認された回答を参照してください。
Observable.from():
値のリストがあり(Rxとは関係ありません)、Observableが作成されますfromこのリスト。オブザーバーがこのObservableをサブスクライブすると、値のリストがNext()イベントとして1つずつ渡され、その後Completed()が渡されるため、このプロセスを制御できません。
Observable.create():
イベントを1つずつ明示的に発行して、イベントのシーケンスを作成します。したがって、いつでもOnCompletedイベントとOnErrorイベントを発行できます。