2017-12-26 23 views
-3

Observablesには適切なユースケースがあると思いますが、オブザーバブルとして実装する方法がわかりません。最も直観的な概念ではありません。 3つの数字があるとします:let a: number, b: number, c: number;と私はそれらが変化するのを監視したいと思います。 if((a + b + c)/3 === 0)) return true else false。これらの数値を監視するオブザーバを作成するにはどうすればいいですか?booleanの値を取得できますか?Observables Basics

+2

コメントなしでも下降しているこれらのモンスターは誰ですか? – Zachscs

+0

4つのストリーム(観測値)を定義します。個々の変数ごとに1つ、その値をその式に結合する1つです。自分で学習する場合は、https://www.learnrxjs.io/ –

+0

をチェックしてください。どのように角度に関連していますか? –

答えて

3

例を示します。技術的に言えば、SubjectsObservablesあるため、現実の生活aSubjectbSubject、およびcSubjectObservable規則的であるが、あなたが構築したり、あなたのフレームワークや選択肢から入手どちらかという流れの中など

私のデモでは、私は、BehaviorSubject Sを使用します。

3で割っabcの最後の既知の値の和は、0であるかどうかをチェックセットアップコードの部分は3つのソースストリームを作成し、formulaObservableaSubject.next(1)は、ある意味では「通常の」JSではa = 1と多少似ています。主な違いは、.next()がObservableストリームのでもを作成していることです。

演算子は、n入力観測可能なストリームを見て、それらのnストリームの最後の既知の値の関数を計算する新しいObservableを作成します。

import { Observable, BehaviorSubject } from 'rxjs'; 

// "Setup" 

const aSubject = new BehaviorSubject<number | undefined>(undefined); 
const bSubject = new BehaviorSubject<number | undefined>(undefined); 
const cSubject = new BehaviorSubject<number | undefined>(undefined); 

const formulaObservable = Observable 
    .combineLatest(
    aSubject, 
    bSubject, 
    cSubject, 
) 
    .map(values => { 
    const [a, b, c] = values; 
    if (a == null || b == null || c == null) { 
     return Observable.never(); 
    } else { 
     return (a + b + c)/3 === 0; 
    } 
    }); 

formulaObservable.subscribe(result => console.warn(`Result: ${result}`)); 

// --- 
// "Usage" 

aSubject.next(1); 
bSubject.next(2); 
cSubject.next(1); // a===1, b===2,   c===1,   formulaObservable==Observable.of(false) 
bSubject.next(1); // a===1, b===1,   c===1,   formulaObservable==Observable.of(true) 

希望します。


P.S.インタラクティブRxJsMarblesでプレイして、彼らの動作をよりよく理解できます。色のついたボールはドラッグ可能であることに注意してください。

P.P.S.これは大丈夫な質問ですが、私はあなたのdownvotesは、あなたが研究をしなかったという事実(質問自体にコードが掲載されていない)か、StackOverflowで検索しなかったことから来ていると思います。

+0

@Zachscs yeah、np –

+1

結果の型がObservable > '。ヌル入力で出力したくない場合は、それらを 'フィルタする '必要があります。 –

+0

それは良い点です。本質的に 'map'を' filter'と 'map'に分割し、かなり単純化しています。 –