비슷한 찾고 대답을 downvoted했다. 그러나 제한된 경우에 대해 내가 제안하는 것을 정당화 할 수 있다고 생각합니다.
관찰 가능 항목에 현재 값 이없는 것이 사실이지만 , 종종 즉시 사용 가능한 값을 갖습니다. 예를 들어 redux / flux / akita 상점의 경우 여러 관측 가능 항목을 기반으로 중앙 상점에 데이터를 요청할 수 있으며 일반적으로 해당 값을 즉시 사용할 수 있습니다.
이 경우이면 subscribe
값이 즉시 돌아옵니다.
그럼 당신이 서비스에 전화를했다 말, 및 완료에 당신이 상점에서 무언가의 최신 값을 싶어 할 가능성이 방출되지 않을 수도 있음 :
당신은 이것을 시도 할 수 있습니다 (그리고 가능한 한 많은 것을 파이프 안에 보관해야합니다) :
serviceCallResponse$.pipe(withLatestFrom(store$.select(x => x.customer)))
.subscribe(([ serviceCallResponse, customer] => {
// we have serviceCallResponse and customer
});
이것의 문제는 2 차 관측 가능 값이 방출 될 때까지 차단 될 수 있다는 것입니다.
나는 최근 에 값을 즉시 사용할 수있는 경우에만 관측 가능 항목을 평가해야한다는 것을 알았 으며, 더 중요하게는 그렇지 않은 경우를 감지 할 수 있어야했습니다. 나는 이것을 끝내었다.
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
.