Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 3279|Yanıt: 2

[Diğer] firstValueFrom ile lastValueFrom arasındaki fark hakkında RxJS

[Bağlantıyı kopyala]
2024-8-6 11:19:02 tarihinde yayınlandı | | | |
Gereksinimler: Proje Observables'ı Promises'e dönüştürmeli ve tamamlanmasını beklemelidir; bir Angular projesinde toPromise() yöntemi kullanılırken ipucu kullanılmamıştır, ardından firstValueFrom veya lastValueFrom statik yöntemlerinin kullanılması önerilir.



Neden toPromise() yöntemini reddediyorsun?

Çünkü toPromise() yöntem adı, Promise'in hangi yayımlanan değeri çözeceğini asla belirtmez, çünkü Observable'lar zaman içinde birden fazla değer üretebilir. Bir Söze dönüştürürken, ilk gelen değeri mi yoksa son değeri mi seçmek istediğinizi seçmek isteyebilirsiniz. Tüm bu sorunları çözmek için, toPromise()'dan yayın yapmaya ve vaatlere dönüştürmek için iki yeni yardımcı fonksiyon eklemeye karar verdik.

Sadece anlayınGözlemlenebilirler birden fazla değer üretirVe sonraSöz vermek sadece bir değerle sonuçlanırSonra, bazı kullanıcılar ilk değeri kullanmak ister, bazıları ise son değeri kullanmak ister, böylece firstValueFrom ve lastValueFrom görünür. (Not: toPromise(), gözlemlenebilirleri almak için son değerdir

firstValueFrom örneğinden

İlk değeri geldiğinde Observable'ın tamamlanmasını beklemeden almak isteyebilirsiniz, böylece firstValueFrom kullanabilirsiniz. firstValueFrom, Gözlemlenebilir tarafından yayımlanan ilk değerle Sözü' çözer ve kaynağı korumak için hemen abonelikten çıkarır. Eğer Observable hiçbir değer yaymadan tamamlanırsa, firstValueFrom da EmptyError ile reddedilir.



lastValueFrom örnekten

lastValueFrom, neredeyse toPromise() ile aynıdır, yani Observable tamamlandığında ulaşılan son değerle ayrıştırır, ancak Observable tamamlandığında tek bir değer yaymadan farklı davranır. Observable tamamlandığında ve ateşlenmediğinde, toPromise() tanımlanmamış olarak başarıyla çözülür (döndürme türü değişir) ve lastValueFrom EmptyError olarak reddedilir. Bu nedenle, lastValueFrom'un dönüş türü <T>Promise'dir, tıpkı RxJS 6'daki toPromise() gibi.





Örnek ayrıştırma

RxJS'de, interval(1000) her 1000 milisaniyede (yani 1 saniyede) bir sayılar dizisini yayan bir gözlemlenebilir oluşturur; bu dizide 0 ile başlar.

Sonra, .pipe(take(10)) Observable'ın yaydığı eleman sayısını sınırlayan bir operatör zinciridir. Burada, take(10) yalnızca ilk 10 yayılan değerin alındığı anlamına gelir.

Bu ifadeyi ayrıntılı olarak açıklayalım:

interval(1000): Her 1 saniyede bir sayı yayan bir gözlemlenebilir oluşturulur. Sayı dizisi 0'dan başlar ve her seferinde 1 artar.

.pipe(take(10)): Birden fazla operatörü bağlamak için .pipe() yöntemini kullanın. Burada take(10) operatörünü kullanırız, bu operatör Observable'ı yalnızca ilk 10 değeri yaymakla sınırlar.

EmptyError hataları için test

Kod şöyledir:


veya




Referans:Bağlantı girişi görünür.




Önceki:MySQL komut satırı sorgu sonuçları döner? soru işareti
Önümüzdeki:Angular 18 serisi (yirmi iki) FontAwesome ikon kütüphanesini tanıtıyor
 Ev sahibi| 2024-8-6 tarihinde 11:21:09 tarihinde yayınlandı |
Angular HTTP'de lastValueFrom veya firstValueFrom kullanırsanız, eşdeğerdir, farkı yoktur, yani ikisini de kullanabilirsiniz.
 Ev sahibi| 2024-10-16 tarihinde 21:44:52 tarihinde yayınlandı |
Eğer returnof() durumunda sırada elemanlar yok istisnası alabilirsiniz, lastValueFrom artık yapılandırma parametresini ikinci parametre olarak alıyor ve gözlemlenebilir boşken yayımlanacak varsayılan değeri belirleyebilirsiniz:

Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com