Saya mencoba untuk membungkus kepala saya di sekitar yang bisa diamati. Saya suka cara yang diamati diamati memecahkan masalah pengembangan dan keterbacaan. Ketika saya membaca, manfaatnya sangat besar.
Dapat diamati pada HTTP dan koleksi tampaknya lurus ke depan. Bagaimana saya bisa mengubah sesuatu seperti ini menjadi pola yang bisa diamati.
Ini dari komponen layanan saya, untuk memberikan otentikasi. Saya lebih suka ini bekerja seperti layanan HTTP lain di Angular2 - dengan dukungan untuk penangan data, kesalahan dan penyelesaian.
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(function(firebaseUser) {
// do something to update your UI component
// pass user object to UI component
})
.catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
Bantuan apa pun di sini akan sangat dihargai. Satu-satunya solusi alternatif yang saya miliki adalah menciptakan EventEmitter
. Tapi saya rasa itu cara yang buruk untuk melakukan hal-hal di bagian layanan
sumber
from
metode pengembalian dapat diamati tetapi mengirimkan janji sebagai nilai untuk langganan. :(operators
"intuisi" - saya salah.coba ini:
Anda dapat menemukan referensi lengkap dari fromPromise operator di sini .
sumber
import 'rxjs/add/observable/fromPromise';
import { Observable } from "rxjs/Observable";
:)1 Eksekusi / Konversi Langsung
Gunakan
from
untuk secara langsung mengonversi janji yang dibuat sebelumnya menjadi yang dapat diobservasi.observable$
akan menjadi sesuatu yang dapat diobservasi panas yang secara efektif memutar kembali nilai janji kepada pelanggan.Badan yang dijanjikan sedang dieksekusi atau telah diselesaikan ketika yang diamati diamati. Jika janji batin telah dipecahkan, pelanggan baru yang dapat diamati akan segera mendapatkan nilainya.
2 Eksekusi Ditangguhkan Pada Setiap Berlangganan
Gunakan
defer
dengan fungsi pabrik janji sebagai input untuk menunda pembuatan dan konversi janji menjadi yang dapat diobservasi.observable$
akan menjadi dingin yang bisa diamati .Perbedaannya
from
adalah bahwadefer
menunggu pelanggan dan hanya kemudian menciptakan janji baru dengan memanggil fungsi pabrik janji yang diberikan. Ini berguna ketika Anda ingin membuat yang dapat diamati tetapi tidak ingin janji batin dieksekusi segera. Janji batin hanya akan dieksekusi ketika seseorang berlangganan yang dapat diamati. Setiap pelanggan juga akan mendapatkan diamati baru sendiri.3 Banyak Operator Menerima Janji Secara Langsung
Kebanyakan operator RxJS yang menggabungkan (misalnya
merge
,concat
,forkJoin
,combineLatest
...) atau mengubah diamati (misalnyaswitchMap
,mergeMap
,concatMap
,catchError
...) menerima janji-janji secara langsung. Jika Anda menggunakan salah satunya, Anda tidak harus menggunakanfrom
untuk membungkus janji terlebih dahulu (tetapi untuk membuat dingin dapat diamati Anda masih harus menggunakandefer
).Periksa dokumentasi atau implementasi untuk melihat apakah operator yang Anda gunakan menerima
ObservableInput
atauSubscribableOrPromise
.Perbedaan antara
from
dandefer
dalam contoh: https://stackblitz.com/edit/rxjs-6rb7vfsumber
Anda juga dapat menggunakan Subjek dan memicu fungsi () berikutnya dari janji. Lihat contoh di bawah ini:
Tambahkan kode seperti di bawah ini (saya menggunakan layanan)
Buat Pengguna Dari Komponen seperti di bawah ini
sumber
rxjs
.new Observable(observer => { ... observer.next() ... })
cara untuk mengimplementasikannya. Meskipun itu akan menjadi implementasi ulang dari fungsi terkenal yang sudah ada, itu akan langsung menjawab pertanyaan dan tidak akan berbahaya bagi pembaca.Anda juga dapat menggunakan penundaan . Perbedaan utama adalah bahwa janji itu tidak akan menyelesaikan atau menolak dengan penuh semangat.
sumber
Anda dapat menambahkan pembungkus di sekitar fungsi janji untuk mengembalikan Pengamatan kepada pengamat.
sumber