'/' dan 'operatörünün'


154

Observable.ofVe Observable.fromargümanlar biçimi arasındaki tek fark nedir? Gibi Function.prototype.callve Function.prototype.apply?

Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})

Yanıtlar:


115

Pek değil. Bir diziyi geçirirken Observable.from, onunla arasındaki tek fark Observable.of, bağımsız değişkenlerin geçirilme şeklidir.

Ancak, Observable.frombir kabul edecek argüman olduğunu

dönüştürülebilen bir abone nesnesi, bir Söz, Gözlenebilir benzeri, Dizi, yinelenebilir veya diziye benzer bir nesne

Her Observable.ofzaman yalnızca değerleri kabul eden ve dönüşüm gerçekleştirmeyen benzer bir davranış yoktur.


193

Dizi benzeri bir yapı (dizeler dahil) geçirilirken ofve fromgeçirilirken fark edilmesi önemlidir :

Observable.of([1, 2, 3]).subscribe(x => console.log(x));

tüm diziyi aynı anda basar.

Diğer yandan,

Observable.from([1, 2, 3]).subscribe(x => console.log(x));

elemanları 1'e 1 yazdırır.

Dizeler için davranış aynıdır, ancak karakter düzeyindedir.


(Observable.of (1, 2, 3).
xiaoke

1
@xiaoke O zaman kesinlikle 3 ayrı emisyon (1, sonra 2, sonra 3).
Tsvetan Ovedenski

16

Bir başka ilginç gerçek de Observable.of ([]), abone olduğunuzda boş bir dizi olacaktır. Observable.from ([]) 'a abone olduğunuzda herhangi bir değer elde edemezsiniz.

Switchmap ile ardışık bir işlem yaptığınızda bu önemlidir.

Örn: Aşağıdaki örnekte, bir işi ve ardından siteleri kaydediyorum ve ardından akış olarak yorum yapıyorum.

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

kaydedilecek bir site yoksa; addSite bölümünde data.length = 0, yukarıdaki kod Observable.of ([]) döndürüyor ve ardından yorumları kaydetmeye gidiyor. Ancak bunu Observable.from ([]) ile değiştirirseniz, sonraki yöntemler çağrılmaz.

rxfiddle


6

Bir satır farkı:

       let fruits = ['orange','apple','banana']

from : Öğeleri birer birer diziye yayar. Örneğin

    from(fruits).subscribe(console.log) // 'orange','apple','banana'

arasında : aynı anda dışarı verir bütün dizi. Örneğin

 of(fruits).subscribe(console.log) //  ['orange','apple','banana']

NOT: bir operatör olarak davranabilir gelen operatöre yayılmış operatörü

 of(...fruits).subscribe(console.log) //  'orange','apple','banana'


0

from: Dizi, söz veya yinelenebilir gözlemlenebilir oluşturun. Sadece bir değer alır. Diziler, yinelenebilirler ve dizeler için, içerilen tüm değerler bir dizi olarak yayılır

const values = [1, 2, 3];
from(values); // 1 ... 2 ... 3

of: Değişken miktarda değerlerle gözlemlenebilir oluşturma, değerleri sırayla yayınlama, ancak tek değer olarak diziler oluşturma

const values = [1, 2, 3];
of(values, 'hi', 4, 5); // [1, 2, 3] ... 'hi' ... 4 ... 5
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.