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. |