2017-09-23 27 views
2

非同期サービスに戻り値がありませんがObservablesを使用する場合は、Observable<boolean>を使用する傾向があります。しかし、このブール値の意味はありません。なぜなら、サービスが失敗したり成功したりするためです。失敗した場合、Observableをエラー状態にします。これは、観測されたブール値に対して「真の」値のみを残します。Observable <void> Typescriptの使用パターン

Observable<void>のこのような使用は、これらの状況に適したパターンですか?またはObservable<void>

const asyncFuncWithoutResult =(): Observable<void> => { 
    // fake something async that has no return value 

    const itWorked = true; // or not 
    if (itWorked) { 
    return Observable.of(); 
    } else { 
    return Observable.throw(Error('It did not work')); 
    } 
} 

// call the service 
asyncFuncWithoutResult() 
    .subscribe(
    undefined, // nothing will be emitted when using Observable.of() 
    (err: any) => console.error(err), // handle error state 
    () => console.log('Success'),  // handle success state 
); 
+1

私はいずれかを見ることができません明白な問題。任意の値を出力する必要がある状況に遭遇した場合は、いつでも 'concat'と' Observable.of'を使用して任意の値を出力できます。例えば。 'asyncFuncWithoutResult()。concat(Observable.of(" success! "))'です。 – cartant

+0

Thx、これは非常に便利なチップです。 – Halt

答えて

1

を使用したが、予見可能な問題は、あなたがジェネリック型と件名を定義するときに、唯一の方法がありますあなたがそのnext()メソッドを呼び出すことができ、それが引数なしでvoidだけで、より正確には、次のとおりです。

const subject = new Subject<void>(); 
subject.next(); 

実際には、nextvalue引数は、あなたがそれを指定していないので、もしそれがあなたがSubject<void>を持っている場合でも、あなたはまだ0123を受けるだろうことを意味しているundefinedをお送りしますオプションです。の通知

asyncFuncWithoutResult().subscribe(alawaysUndefined => { 
    /* ... */ 
}); 

はまたmapまたはmapToで(あなたが複数の観測をマージしたい場合、これは必要である)あなたが<void>に観察可能に回すことができることに注意してください。

source.mapTo(void 0) 
    ... 
+0

追加情報をありがとう、非常に参考になりました。もしsubject.next(); 'undefined'という結果が出力された場合、このObservable.of()のアナログはObservableを返すことはありません。 – Halt

+1

私はこれらが2つの異なることだと思います。 'Observable.of()'(または 'Observable.empty')のように、' next'を発行せず、 'complete'通知のみを送信するObservableを持つことはまったく問題ありません。一方、何もしないことが分かっているときにこのメソッドを呼び出す点が何であるのかという理由で、 'subject.next()'に何もしないのは意味がありません。なぜなら、なぜ誰かがそれらを使いたいのであろうかという理由で、 'next'、' complete'、 'error'の通知を出さないObservableはありません。 – martin

関連する問題