前提
Observableについて理解する必要があります。
https://qiita.com/ryuseikurata/private/fa5227a1203af86a19ab
https://qiita.com/ryuseikurata/private/45faa9cd8f50a390b10c
Cold
subscribeすることで初めて値が流れるようになります。
//subscribeするまでは、動きません。
const cold = new Observable(function subscribe(observer) {
console.log('subscribed');
observer.next(Math.random());
observer.complete();
});
//subscribeすることで動きます。ストリームを二回稼働させている状態です。
cold.subscribe((num) => console.log('sub 1:', num));
cold.subscribe((num) => console.log('sub 2:', num));
//1回目のsubscribe
subscribed
sub 1: 0.09805969045
//2回目のsubscribe
subscribed
sub 2: 0.1231231231231
Hot
hot変換までの処理は、値が流れるようにします。
したがって、それまでのストリームの処理は一度しか行われず、その後は返り値で作られたobservableが残ります。
//publish()によって、hot変換され、動く状態になっています。
const cold = new Observable(function subscribe(observer) {
console.log('subscribed');
observer.next(Math.random());
observer.complete();
});
const hot = cold.publish();
//hot変換後の返り値で作られたメッセージを流しています。
hot.subscribe((num) => console.log('sub 1:', num));
//hot変換後の返り値で作られたメッセージを流しています。
hot.subscribe((num) => console.log('sub 2:', num));
//connectで稼働します。
hot.connect(); // <-- this subscribes the inner Subject to the cold source
//connectで稼働し、subscribedがはじめにきます。
subscribed
//hot変換後のsubscribeなので、Math.randome()が返り値として残ったobservableを処理しています。
sub 1: 0.249848935489
sub 2: 0.249848935489
引用