Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 3279|Jawab: 2

[Lainnya] RxJS tentang perbedaan antara firstValueFrom dan lastValueFrom

[Salin tautan]
Dipaparkan pada 2024-8-6 11:19:02 | | | |
Persyaratan: Proyek perlu mengonversi Observables ke Promises dan menunggu penyelesaian, dan saat menggunakan metode toPromise() dalam proyek Angular, petunjuk telah tidak digunakan lagi, dan kemudian disarankan untuk menggunakan metode statis firstValueFrom atau lastValueFrom.



Mengapa menghentikan metode toPromise()?

Karena nama metode toPromise() tidak pernah menunjukkan nilai mana yang dipancarkan yang akan diselesaikan oleh Promise, karena Observables dapat menghasilkan beberapa nilai dari waktu ke waktu. Saat mengonversi ke Promise, Anda mungkin ingin memilih apakah Anda ingin memilih nilai pertama yang akan tiba atau nilai terakhir. Untuk mengatasi semua masalah ini, kami memutuskan untuk menghentikan toPromise() dan memperkenalkan dua fungsi pembantu baru untuk mengonversi menjadi promise.

Cukup pahamiObservables menghasilkan banyak nilaiLaluJanji hanya akan menghasilkan satu nilaiKemudian, beberapa pengguna ingin menggunakan nilai pertama, dan beberapa pengguna ingin menggunakan nilai terakhir, sehingga firstValueFrom dan lastValueFrom muncul. (Catatan: toPromise() adalah nilai terakhir untuk mendapatkan observable

firstValueFrom contoh

Anda mungkin ingin mendapatkan nilai pertama saat tiba tanpa menunggu Observable selesai, sehingga Anda dapat menggunakan firstValueFrom. firstValueFrom akan menyelesaikan Promise dengan nilai pertama yang dipancarkan oleh Observable dan segera berhenti berlangganan untuk mempertahankan sumber daya. Jika Observable selesai tanpa memancarkan nilai apa pun, firstValueFrom juga akan ditolak dengan EmptyError.



lastValueFrom contoh

lastValueFrom hampir identik dengan toPromise(), yang berarti akan mengurai dengan nilai terakhir yang dicapai saat Observable selesai, tetapi berperilaku berbeda saat Observable selesai tanpa memancarkan satu nilai pun. Ketika Observable selesai tanpa diaktifkan, toPromise() akan berhasil diselesaikan menjadi undefined (sehingga jenis pengembalian berubah), dan lastValueFrom akan ditolak sebagai EmptyError. Oleh karena itu, jenis pengembalian lastValueFrom adalah Promise<T>, seperti toPromise() di RxJS 6.





Contoh penguraian

Dalam RxJS, interval(1000) menghasilkan observable yang memancarkan urutan angka bertahap setiap 1000 milidetik (yaitu, 1 detik), mulai dari 0.

Selanjutnya, .pipe(take(10)) adalah rantai operator yang membatasi jumlah elemen yang dipancarkan Observable. Di sini, take(10) berarti bahwa hanya nilai dari 10 yang pertama dipancarkan yang diambil.

Mari kita jelaskan ungkapan ini secara rinci:

interval(1000): Buat observable yang memancarkan angka setiap 1 detik. Urutan angka dimulai dari 0 dan bertambah 1 setiap kali.

.pipe(take(10)): Gunakan metode .pipe() untuk menghubungkan beberapa operator. Di sini kita menggunakan operator take(10), yang membatasi Observable untuk hanya memancarkan 10 nilai pertama.

Uji kesalahan EmptyError

Kodenya adalah sebagai berikut:


atau




Referensi:Login hyperlink terlihat.




Mantan:Hasil kueri baris perintah MySQL mengembalikan ? tanda tanya
Depan:Seri Angular 18 (dua puluh dua) memperkenalkan perpustakaan ikon FontAwesome
 Tuan tanah| Dipaparkan pada 2024-8-6 11:21:09 |
Jika Anda menggunakan lastValueFrom atau firstValueFrom di Angular HTTP, itu setara, tidak ada perbedaan, yaitu Anda dapat menggunakan salah satunya.
 Tuan tanah| Dipaparkan pada 2024-10-16 21:44:52 |
Jika Anda mengembalikan of() Anda mungkin mendapatkan pengecualian no elements in sequence, lastValueFrom now mengambil parameter konfigurasi sebagai parameter keduanya, dan Anda dapat menentukan nilai default yang akan dipancarkan saat yang dapat diamati kosong:

Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com