Jawaban:
Tidak terlalu. Saat meneruskan array ke Observable.from
, satu-satunya perbedaan antara itu dan Observable.of
cara argumen dilewatkan.
Namun, Observable.from
akan menerima argumen itu
objek yang dapat berlangganan, Janji, objek yang Dapat Diamati, Array, objek yang dapat diubah atau mirip array yang akan dikonversi
Tidak ada perilaku serupa untuk Observable.of
- yang selalu hanya menerima nilai dan tidak melakukan konversi.
Penting untuk dicatat perbedaan antara of
dan from
ketika melewati struktur mirip array (termasuk string):
Observable.of([1, 2, 3]).subscribe(x => console.log(x));
akan mencetak seluruh array sekaligus.
Di samping itu,
Observable.from([1, 2, 3]).subscribe(x => console.log(x));
mencetak elemen 1 dengan 1.
Untuk string, tingkah lakunya sama, tetapi pada level karakter.
Fakta menarik lainnya adalah Observable.of ([]) akan menjadi array kosong ketika Anda berlangganan. Di mana ketika Anda berlangganan Observable.from ([]) Anda tidak akan mendapatkan nilai apa pun.
Ini penting ketika Anda melakukan operasi berurutan dengan switchmap.
Contoh: Dalam contoh di bawah ini, saya menyimpan pekerjaan dan kemudian situs, dan kemudian berkomentar sebagai streaming.
.do((data) => {
this.jobService.save$.next(this.job.id);
})
.switchMap(() => this.jobService.addSites(this.job.id, this.sites)
.flatMap((data) => {
if (data.length > 0) {
// get observables for saving
return Observable.forkJoin(jobSiteObservables);
} else {
**return Observable.of([]);**
}
})).do((result) => {
// ..
})
.switchMap(() => this.saveComments())
....
jika tidak ada situs untuk disimpan, yaitu; data.length = 0 di bagian addSite, kode di atas mengembalikan Observable.of ([]) dan kemudian menyimpan komentar. Tetapi jika Anda menggantinya dengan Observable.from ([]), metode selanjutnya tidak akan dipanggil.
Perbedaan satu baris:
let fruits = ['orange','apple','banana']
from : Emit item satu per satu dari array. Sebagai contoh
from(fruits).subscribe(console.log) // 'orange','apple','banana'
dari : Keluarkan seluruh array sekaligus. Sebagai contoh
of(fruits).subscribe(console.log) // ['orange','apple','banana']
CATATAN: dari operator dapat berperilaku seperti dari operator dengan spread Operator
of(...fruits).subscribe(console.log) // 'orange','apple','banana'
https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100
from
: Buat diamati dari array, janji atau iterable. Hanya mengambil satu nilai. Untuk array, iterables dan string, semua nilai yang terkandung akan dipancarkan sebagai urutan
const values = [1, 2, 3];
from(values); // 1 ... 2 ... 3
of
: Buat nilai-nilai variabel yang dapat diobservasi, keluarkan nilai secara berurutan, tetapi array sebagai nilai tunggal
const values = [1, 2, 3];
of(values, 'hi', 4, 5); // [1, 2, 3] ... 'hi' ... 4 ... 5