Saya perlu membuat langganan ke Observable
yang segera dibuang saat pertama kali dipanggil.
Apakah ada sesuatu seperti:
observable.subscribeOnce(func);
Kasing penggunaan saya, saya membuat langganan dalam pengendali rute ekspres dan langganan dipanggil beberapa kali per permintaan.
observable.pipe(first()).subscribe(func)
, dari manafirst
datangnyarxjs/operators
.RxJS memiliki beberapa dokumentasi terbaik yang pernah saya temui. Mengikuti tautan di bawah ini akan membawa Anda ke tabel penggunaan pemetaan yang sangat membantu bagi operator. Misalnya, di bawah "Saya ingin mengambil nilai pertama" kasus penggunaan tiga operator:
first
,firstOrDefault
, dansample
.Catatan, jika urutan yang dapat diamati selesai tanpa pemberitahuan, maka
first
operator akan memberi tahu pelanggan tentang kesalahan sementarafirstOrDefault
operator memberikan nilai default kepada pelanggan.pencarian kasus penggunaan operator
sumber
Jika Anda ingin memanggil Observable hanya satu kali, itu berarti Anda tidak akan menunggu streaming darinya. Jadi menggunakan
toPromise()
bukansubscribe()
akan cukup dalam kasus Anda karenatoPromise()
tidak perlu berhenti berlangganan.sumber
await
satupromise
yang menjadikannya salah satu kapalUntuk melengkapi jawaban @ Brandon , menggunakan
first()
atau sejenisnya juga penting untuk memperbaruiBehaviorSubject
berdasarkanObservable
. Misalnya (belum diuji):sumber
Versi Bersih dan Nyaman
Memperluas jawaban luar biasa M Fuat NUROĞLU tentang mengonversi yang dapat diamati menjadi sebuah janji, inilah versi yang sangat nyaman.
Keindahan dari ini adalah bahwa kita dapat menggunakan nilai itu seperti variabel normal tanpa memperkenalkan blok bersarang lain!
Ini sangat berguna ketika Anda perlu mendapatkan beberapa nilai dari beberapa yang bisa diamati. Rapi dan bersih.
Tentu saja, Anda harus membuat fungsi yang mengandung
async
Anda jika Anda ingin pergi dengan rute ini. Anda juga bisa hanya.then
berjanji jika Anda tidak ingin fungsi yang mengandung asyncSaya tidak yakin jika ada pengorbanan dengan pendekatan ini, jangan ragu untuk memberi tahu saya di komentar sehingga kami sadar.
PS Jika Anda menyukai jawaban ini, jangan lupa untuk mengunggah Jawaban M Fuat NUROĞLU :)
sumber
Saya punya pertanyaan serupa.
Di bawah ini dipanggil bahkan kemudian dari penukar negara yang berbeda. Karena saya tidak mau.
Saya memutuskan untuk mencoba
unsubscribe()
setelah berlangganan seperti di bawah ini.subscribe(func).unsubscribe();
sepertisubscribeOnce(func)
.Saya harap itu membantu Anda juga.
sumber