Ist der einzige Unterschied zwischen Observable.of
und Observable.from
dem Argumentformat? Wie das Function.prototype.call
und Function.prototype.apply
?
Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})
Nicht ganz. Wenn Sie ein Array an übergeben Observable.from
, besteht der einzige Unterschied zwischen ihm und Observable.of
der Art und Weise, wie die Argumente übergeben werden.
Allerdings Observable.from
wird ein annehmen Argument , das ist
ein abonnierbares Objekt, ein Versprechen, ein beobachtbares Objekt, ein Array, ein iterierbares oder ein Array-ähnliches Objekt, das konvertiert werden soll
Es gibt kein ähnliches Verhalten für Observable.of
- das immer nur Werte akzeptiert und keine Konvertierung durchführt.
Es ist wichtig, den Unterschied zwischen of
und from
beim Übergeben einer Array-ähnlichen Struktur (einschließlich Zeichenfolgen) zu beachten :
Observable.of([1, 2, 3]).subscribe(x => console.log(x));
würde das gesamte Array auf einmal drucken.
Andererseits,
Observable.from([1, 2, 3]).subscribe(x => console.log(x));
druckt die Elemente 1 mal 1.
Bei Zeichenfolgen ist das Verhalten dasselbe, jedoch auf Zeichenebene.
Eine weitere interessante Tatsache ist, dass Observable.of ([]) ein leeres Array ist, wenn Sie es abonnieren. Wo wie beim Abonnieren von Observable.from ([]) erhalten Sie keinen Wert.
Dies ist wichtig, wenn Sie eine aufeinanderfolgende Operation mit switchmap ausführen.
Beispiel: Im folgenden Beispiel speichere ich einen Job und dann Websites und kommentiere dann als Stream.
wenn es keine Site zum Speichern gibt, dh; data.length = 0 im Abschnitt addSite gibt der obige Code Observable.of ([]) zurück und speichert dann Kommentare. Wenn Sie es jedoch durch Observable.from ([]) ersetzen, werden die nachfolgenden Methoden nicht aufgerufen.
rxfiddle
quelle
Einzeiliger Unterschied:
from : Geben Sie die Elemente einzeln im Array aus. Beispielsweise
of : Das gesamte Array auf einmal ausgeben. Beispielsweise
HINWEIS: der Bediener kann so verhalten von Operator mit Spread - Operator
quelle
https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100
quelle
from
: Erstellen Sie Observable aus Array, Versprechen oder Iterable. Nimmt nur einen Wert an. Bei Arrays, Iterables und Strings werden alle enthaltenen Werte als Sequenz ausgegebenof
: Erstellen Sie Observable mit variablen Mengen an Werten, geben Sie Werte nacheinander aus, aber Arrays als Einzelwertquelle