Benzer görünümlü bir cevap indirildi. Ancak, sınırlı durumlar için burada önerdiğimi haklı çıkarabileceğimi düşünüyorum.
Bir gözlemlenebilir öğenin geçerli bir değeri olmadığı doğru olsa da , çoğu zaman hemen kullanılabilir bir değere sahip olacaktır . Örneğin redux / flux / akita mağazalarında, bir dizi gözlemlenebilir veriye dayalı olarak merkezi bir mağazadan veri talep edebilirsiniz ve bu değer genellikle hemen kullanılabilir olacaktır.
Eğer durum buysa, o zaman subscribe
değer hemen geri gelecektir.
Diyelim ki bir hizmet çağrınız var ve tamamlandığında mağazanızdan potansiyel olarak yaymayabilecek bir şeyin en son değerini almak istiyorsunuz :
Bunu yapmaya çalışabilirsiniz (ve işleri mümkün olduğunca 'boruların içinde' tutmalısınız):
serviceCallResponse$.pipe(withLatestFrom(store$.select(x => x.customer)))
.subscribe(([ serviceCallResponse, customer] => {
// we have serviceCallResponse and customer
});
Buradaki sorun, ikincil gözlemlenebilir bir değer yayana kadar bloke olacağıdır, bu potansiyel olarak asla olamaz.
Kendimi son zamanlarda gözlemlenebilir bir değerlendirmeyi sadece bir değer mevcut olduğunda değerlendirmeye ihtiyaç duyduğumu gördüm ve daha da önemlisi, olmadığını tespit edebilmem gerekiyordu. Sonunda bunu yaptım:
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');
}
});
Yukarıdakilerin tümü subscribe
için değeri almak için kullanıyorum (@Ben tartıştığı gibi). Ben bir .value
özellik olmasa bile BehaviorSubject
.