同様に見える回答が反対票を投じられました。しかし、私がここで提案していることは、限られたケースで正当化できると思います。
オブザーバブルに現在の値がないことは事実ですが、多くの場合、すぐに利用可能な値を持っています。たとえば、redux / flux / akitaストアでは、いくつかのオブザーバブルに基づいて中央ストアからデータをリクエストでき、その値は通常すぐに利用できます。
この場合は、を実行するsubscribe
と、値がすぐに返されます。
それでは、あなたがサービスへの呼び出しがあったとしましょう、と終了時に、あなたはあなたの店から何かの最新の値を取得したい潜在的に放出しない可能性があること:
あなたはこれを試みるかもしれません(そしてあなたは可能な限り「パイプの内側」に物事を保つべきです):
serviceCallResponse$.pipe(withLatestFrom(store$.select(x => x.customer)))
.subscribe(([ serviceCallResponse, customer] => {
// we have serviceCallResponse and customer
});
これの問題は、セカンダリオブザーバブルが値を放出するまでブロックされることです。
私は最近、値がすぐに利用できる場合にのみオブザーバブルを評価する必要があることに気付きました。さらに重要なのは、値が利用できない場合にそれを検出できるようにする必要があったことです。私はこれをやった:
serviceCallResponse$.pipe()
.subscribe(serviceCallResponse => {
// immediately try to subscribe to get the 'available' value
// note: immediately unsubscribe afterward to 'cancel' if needed
let customer = undefined;
// whatever the secondary observable is
const secondary$ = store$.select(x => x.customer);
// subscribe to it, and assign to closure scope
sub = secondary$.pipe(take(1)).subscribe(_customer => customer = _customer);
sub.unsubscribe();
// if there's a delay or customer isn't available the value won't have been set before we get here
if (customer === undefined)
{
// handle, or ignore as needed
return throwError('Customer was not immediately available');
}
});
上記のすべてについてsubscribe
、値を取得するために使用していることに注意してください(@Benが説明しているように)。.value
私が持っていても、プロパティを使用していませんBehaviorSubject
。