Was ist der Unterschied zwischen Versprechen und Observablen?
Kann mir bitte jemand erklären den Unterschied zwischen Promise
und Observable
im Eckigen?
Ein Beispiel zu jedem wäre hilfreich beim Verständnis der Fälle.
In welchem Szenario können wir jeweils?
- Ich würde dir empfehlen, diesen Beitrag zu Lesen; Angular2 Versprechen vs beobachten
- in einfacheren Worten Winkel-2-Trainings-Buch.rangle.io/handout/observablen/...
- Zu jeder der Lektüre dieses Q&A - als jemand, der beteiligt ist in beiden Welten zu Hause von einem Betreuer, Lautsprecher und long-time-user PoV-ich möchte Sie ermutigen, Lesen Sie die offiziellen RxJS docs und die MDN-Dokumentation verspricht. ich persönlich finde die Antworten hier völlig irreführend und falsch und glauben, dass Sie, während Sie mit guten Absichten von Menschen, die versuchen zu helfen, sehr schädlich.
- Ich schlage vor, Sie Lesen Sie diese eckige offiziellen Dokument Winkel.io/guide/Vergleich-observablen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versprechen
Einen
Promise
verarbeitet einzelnes Ereignis, wenn eine asynchrone operation abgeschlossen wird oder fehlschlägt.Hinweis: Es gibt
Promise
Bibliotheken gibt, die Unterstützung Stornierung, aber ES6Promise
nicht so weit.Beobachtbaren
Einer
Observable
ist wie einStream
(in vielen Sprachen) und ermöglicht die übergabe von null oder mehr Ereignisse, bei denen der callback wird aufgerufen, für jedes Ereignis.Oft
Observable
ist bevorzugt überPromise
weil es bietet Ihnen die Funktionen vonPromise
und mehr. MitObservable
ist es egal, ob Sie möchten, um zu behandeln, 0, 1, oder mehrere Ereignisse. Sie können verwenden die gleiche API in jedem Fall.Observable
hat auch den Vorteil, überPromise
werden stornierbar. Wenn das Ergebnis einer HTTP-Anfrage an einen server oder eine andere teure async operation ist nicht mehr nötig, dieSubscription
einerObservable
ermöglicht, das Abonnement zu kündigen, während einePromise
wird schließlich rufen Sie den Erfolg "oder" fehlgeschlagen Rückruf, auch wenn Sie nicht brauchen, die Mitteilung oder das Ergebnis, es bietet mehr.Beobachtbaren bietet Betreiber wie
map
,forEach
,reduce
, ... ähnlich wie ein arrayGibt es auch mächtige Operatoren wie
retry()
oderreplay()
, ... das sind oft ganz praktisch.Observable
oder warum denkst du, dass die Argumente fürObservable
sind nicht gültig oder nicht stark genug?Http
API ein bisschen ändern, im Laufe der Zeit und machen bessere Nutzung vonObservables
.Http
ist noch sehr basic.toPromise
ist eine schlechte Idee. Nur wenn Sie mitObservables
überall reative-wie Programmierstil, das kann wirklich sein potential zeigen. Vielen Dank für Ihr feedback. Ich wusste gar nicht wahrnehmen, es als Kritik. Ich bin nur neugierig, was Sie gelernt haben, und vielleicht teilen können, etwas neues für mich.Observable
ist ein Vorteil gegenüberPromises
? Bei der Verwendung verspricht, ich kann Kette Sie an und kontrollieren Sie, ob das nächste Versprechen in der Kette gefeuert werden sollte oder nicht.Promise
(ES6) können nicht storniert werden während der Wartezeit für eine asynchrone Aufruf abgeschlossen, während Beobachtbar macht. Diese Kündigung könnte zu propagieren, zurück zu den Produzenten des async-Ergebnis und vielleicht sogar aufhören, eine teure Berechnung, während einePromise
würde immer noch die teure Berechnung, auch wenn der Empfänger bereits beschlossen, nicht daran interessiert sein, das Ergebnis mehr und nicht warten, bis es.vendors: Observable<any> = this.http.get(url).map(res => res.json()).publishLast().refCount();
Die kühle Sache über die Verwendung von Beobachtbaren in diesem Fall können Sie abonnieren, um es in mehreren Orten und es wird nicht requery. Jedenfalls nur ein Grund für die Verwendung von Observablen.Promise
zusammen mitasync
/await
lässt sich der code wieder flach! In der Mehrheit der Situationen, und in Projekten, beschäftigen sich nicht mit Wissenschaft, gibt es keine Notwendigkeit zu schreiben, diese schrecklichen verschachtelte Funktionen mit unnötig komplizierten Ketten von Methoden. Sie könnenasync
/await
heute mit transpilers, wieTypeScript
und schreiben tatsächlichen lesbare Flachbild-code ohne dierxjs
boilerplate. Sie wird vermutlich nochrxjs
manchmal in ausgewählten Situationen, denn es hat wirklich eine Menge Dinge zu bieten.Promise
oderObservable
jeder kann verwendet werden. Wenn stream von Werten wird zurückgegeben, das ist, woObservable
Glanz und auch mit einigen Zusatz features, die es hat mitretry()
,forEach
, calcelable etc. Ich bin etwas newbie auf diesem, so können Sie bitte ein Beispiel, wo eine api würde die Rückkehr stream von Werten? Auch jedes Beispiel, wo api-Anforderung müssen abgebrochen werden?isLoggedIn
Zustand. Eine Komponente oder ein service wünschen konnte, um über änderungen informiert. Die Komponente oder der Dienst abonniert, um eine Beobachtbare und wird informiert, wenn der Benutzer anmeldet oder aus. Ein weiteres Beispiel wäre ein Fortschrittsbalken Komponente übergeben bekommt eine Beobachtbare bietet die Fortschritt-updates.onLoad
(Versprechen - genau einmal) odermouseMove
(Beobachtbare - Reihe von Ergebnissen, bis Sie sich vom Newsletter Abmelden)Http
AnfragenObservables
innerhalb des Dienstes und bei der Verwendung in Komponenten, können Sie entweder verwenden Sie es als standard -Observable
oder verwenden Sie es als einePromise
durch die Verwendung.toPromise()
Beide
Promises
undObservables
uns mit Abstraktionen, die uns helfen, befassen sich mit der asynchrone Natur unserer Anwendungen. Der Unterschied zwischen Ihnen war, deutete eindeutig durch @Günter und @aufgrund der Kr.Da ein code-snippet, das ist mehr Wert als tausend Worte, lassen Sie uns gehen Sie durch das folgende Beispiel zu verstehen, Sie leichter.
Winkel verwendet Rx.js Observablen anstelle der Versprechen, die für den Umgang mit HTTP.
Angenommen, Sie bauen eine Suchfunktion das sollte zeigen Ihnen sofort Ergebnisse während der Eingabe. Klang vertraut, aber es gibt eine Menge von Herausforderungen, die sich mit dieser Aufgabe.
HTTP
Anfragen. Im Grunde wollen wir nur schlagen, sobald der Benutzer aufgehört hat, die Eingabe statt mit jedem Tastenanschlag.Die demo wird einfach aus zwei Dateien:
app.ts
undwikipedia-service.ts
. In einem realen Szenario würden wir wahrscheinlich aufteilen, Dinge weiter oben, obwohl.Unten ist Versprechen-basierend Umsetzung, dass nicht der Griff einer der beschriebenen Sonderfälle.
wikipedia-service.ts
Sind wir die Injektion der
Jsonp
service, um einenGET
Antrag gegen die Wikipedia-API mit einem bestimmten Suchbegriff. Beachten Sie, dass wir nennentoPromise
um von einemObservable<Response>
zu einemPromise<Response>
. Schließlich am Ende mit einemPromise<Array<string>>
als Rückgabe-Typ der unsere such-Methode.app.ts
Nicht viel von einer überraschung, die hier entweder. Wir Spritzen unsere
WikipediaService
aussetzen und seine Funktionalität über eine such-Methode, um die Vorlage. Die Vorlage einfach an sich bindet keyup und fordertsearch(term.value)
.Wir packen das Ergebnis der Versprechen, dass die Suche-Methode der WikipediaService zurück und setzen Sie es als ein einfaches Array von strings die zu der Vorlage, so dass wir
*ngFor
Schleife durch und bauen Sie eine Liste für uns.Siehe das Beispiel von Versprechen-basierend Umsetzung auf Plunker
Wo Observablen wirklich glänzen
Ändern wir unseren code nicht hammer der Endpunkt mit jedem Tastendruck, sondern nur eine Anfrage senden, wenn der Benutzer beendet die Eingabe für 400 ms
Enthüllen solchen super-Kräfte, die wir zunächst brauchen, um eine
Observable<string>
führt, dass die Suche Begriff, den der Benutzer eingibt. Statt manuell die Bindung an das keyup-Ereignis, wir können den Vorteil von Angular istformControl
Richtlinie. Diese Direktive zu verwenden, müssen wir zunächst importieren Sie dieReactiveFormsModule
in unserer application-Modul.app.ts
Einmal importiert, können wir formControl innerhalb unserer Vorlage und legen Sie es auf den Namen "Begriff".
In unserer Komponente, erstellen wir eine Instanz von
FormControl
aus@angular/form
und setzen Sie es als ein Feld unter dem Namen Begriff auf unsere Komponente.Hinter den kulissen, Begriff automatisch stellt eine
Observable<string>
als EigentumvalueChanges
dass wir abonnieren können. Jetzt haben wir eineObservable<string>
überwindung der Benutzer die Eingabe so einfach wie das aufrufendebounceTime(400)
auf unsererObservable
. Dann kommt wieder eine neueObservable<string>
wird nur emittieren einen neuen Wert, wenn es nicht kommen neue Werte für 400ms.Wäre es eine Verschwendung von Ressourcen zu senden, eine weitere Anforderung für einen Suchbegriff, die unsere app schon zeigt die Ergebnisse für. Alle haben wir zu tun, um das gewünschte Verhalten zu nennen, die
distinctUntilChanged
Betreiber Recht, nachdem wir aufgerufendebounceTime(400)
Siehe das Beispiel von Beobachtbaren Umsetzung auf Plunker
Soweit ich es über Http im Winkel, ich bin damit einverstanden, dass in der normalen Fällen gibt es nicht viel Unterschied bei der Verwendung von Beobachtbaren über Versprechen. Keine der Vorteile wirklich relevant sind hier in der Praxis. Ich hoffe, ich kann sehen, einige erweiterte use-case in der Zukunft 🙂
Beide Verspricht und Observablen wird uns helfen, die Arbeit mit dem asynchrone Funktionalitäten in JavaScript. Sie sind sich sehr ähnlich, in vielen Fällen, es gibt jedoch immer noch einige Unterschiede zwischen den beiden, wie gut, verspricht sind Werte, die aufgelöst wird, in
asynchronous
Möglichkeiten, wie http Anrufe. Auf der anderen Seite observablen Angebot mit einer Sequenz von asynchrone Ereignisse. Die wichtigsten Unterschiede zwischen Ihnen sind unten aufgeführt:Versprechen:
beobachten:
Habe ich dann auch erstellt das grafische Bild für Sie unten zeigen die Unterschiede visuell:
Promise
ist der falsche Weg, um darüber nachzudenken, wie Sie verspricht. DiePromise
's Verantwortung, die Sie nur mit Erfolg oder Misserfolg in einer async-kompatiblen Art und Weise.. Wenn Sie kündigen möchten, eine http-Anforderung, die Sie die Anforderung Abbrechen, nicht das Versprechen, und machen das Ergebnis zu annullieren entweder zu erfüllen oder abzulehnen Versprechen. jsfiddle.net/greggman/ea0yhd4pVerspricht
Observablen
Einem Betreiber wiederholen kann verwendet werden, zu wiederholen, Wann immer nötig, auch wenn wir brauchen, um erneut zu beobachten, basierend auf bestimmten Bedingungen retryWhen verwendet werden kann.
Hinweis: Eine Liste mit Operatoren zusammen mit Ihrer interaktiven Diagrammen verfügbar ist hier bei RxMarbles.com
Es ist ein Nachteil der Observablen fehlt in den Antworten. Versprechungen, die den ES7 async/await-Funktionen. Mit Ihnen, können Sie schreiben von asynchronem code wie es wäre, einen synchronen Funktionsaufruf, so dass Sie nicht brauchen Rückrufe mehr. Die einzige Möglichkeit für die Observablen, dies zu tun, ist zu konvertieren Verspricht. Aber wenn Sie konvertieren Sie Verspricht, Sie kann nur einen Rückgabewert wieder:
Weiter Lesen: Wie kann ich `warten` auf ein Rx Beobachtbar?
Verspricht und Observablen beide behandeln das asynchrone Aufruf nur.
Hier sind die Unterschiede zwischen Ihnen:
Beobachtbaren
Versprechen
Emittiert nur einen einzelnen Wert in einer Zeit,
Fordert, die Leistungen ohne .dann und .fangen
Kann nicht abgebrochen werden,
Nicht alle Operatoren
Obwohl diese Antwort ist spät, habe ich eine Zusammenfassung der Unterschiede unten,
Beobachten:
function
, dass dauertan observer
und gibt einenfunction Observer: an object with next, error.
subscribe/unsubscribe
zu seinen Daten-stream, emittierennächste Wert der Beobachter,
notify
der Beobachter übererrors
undinformieren den Betrachter über die
stream completion
function to handle next value
,Irrtümer unddas Ende des Stroms(ui-events,http-Antworten,Daten mit web sockets).
multiple values
im Laufe der Zeitcancel-able/retry-able
und unterstützt Operatoren wiemap,filter,reduce
etc.-
Observable.create()
- zurück Beobachten können Methoden aufgerufen werden, die auf-
Observer Observable.from()
- konvertiert ein array oder iterierbar in-
Observable Observable.fromEvent()
- konvertiert ein Ereignis zu Beobachten-
Observable.fromPromise()
- konvertiert ein Versprechen in die Beobachtbare-
Observable.range()
- gibt eine Sequenz von ganzen zahlen in dem angegebenen BereichVersprechen:
Ein Versprechen stellt eine Aufgabe, die wird fertig in die Zukunft;
Verspricht sich
resolved by a value
;Verspricht abgelehnt bekommen von Ausnahmen;
Nicht
cancellable
und es gibta single value
Ein Versprechen über eine Funktion
(then)
-gibt dann eine neue
promise
;-ermöglicht die
attachment
der, der ausgeführt wird, basierend aufstate
;-
handlers
sindguaranteed
, um auszuführen,order attached
;Ich glaube, alle anderen Antworten sollten klar Ihre Zweifel.
Trotzdem, ich wollte nur hinzufügen, dass observablen basieren auf der funktionalen Programmierung, und ich finde es sehr nützlich, die Funktionen, die mit ihm gekommen wie map, flatmap, reduce, zip. Die Konsistenz der web-erreicht, vor allem, wenn es hängt von API-Anfragen ist eine brutale Verbesserung.
Empfehle ich diese Dokumentation, da es die offizielle Dokumentation von reactiveX und ich finde, es ist das beste da draußen.
Wenn du willst in die observablen, würde ich vorschlagen, dieses 3-teilige post:
http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/
Obwohl es bedeutete für RxJava, die Konzepte sind die gleichen, und es ist wirklich gut erklärt. In reactiveX Dokumentation haben Sie die äquivalenzen für jede Funktion. Muss man sich für RxJS.
Ich habe gerade behandelt ein Thema, wo die Versprechungen waren die beste Lösung, und ich Teile es hier für alle stolpern über diese Frage in der Veranstaltung ist es nützlich, (das war genau die Antwort die ich suchte früher):
In einem Angular2 Projekt habe ich einen service an, einige Parameter und gibt einen Wert zurück Liste zu füllen drop-down-Menüs in einem Formular. Wenn die form-Komponente initialisiert wurde, muss ich anrufen die den gleichen Dienst mehrere Male mit verschiedenen Parametern zu definieren, die eine Reihe von verschiedenen dropdown-Menüs, aber wenn ich einfach Warteschlange, bis alle Variablen, die zum Aufruf des Dienstes, nur die Letzte erfolgreich abgeschlossen, und die restlichen Fehler aus. Der service abrufen aus der Datenbank könnte nur mit einem Antrag zu einem Zeitpunkt.
Der einzige Weg, um erfolgreich zu bevölkern, die alle dropdown-Menü Variablen war ein Telefonat mit dem service in einer Weise, die verhindert, dass eine neue Anfrage bearbeitet wird, bis die Letzte Anforderung beendet wurde, und die Versprechen /.dann Mechanismus, der das problem schön.
Definierte ich die Funktionen in die Komponente, und dann rief initializeDropDowns() in ngOnInit.
Den fetchValueList Funktion gibt ein Versprechen, so der erste Aufruf übergibt die ersten listCode und wenn das Versprechen aufgelöst wird, ist der Rückgabewert in der variable Daten in der .dann blockieren Sie, wo wir können ordnen Sie die diese.firstValList variable. Die Funktion hat Daten zurückgegeben, wir wissen, dass der service abgeschlossen ist und es sicher wieder anrufen, mit der zweiten listCode, ist der Rückgabewert in der variable Daten in die nächste .dann blockieren Sie und wir weisen Sie der diese.secondValList variable.
Können wir diese Kette so oft wie erforderlich, um füllen Sie alle Variablen, und die Letzte code-block, die wir einfach weglassen, die return-Anweisung und der block wird beendet.
Dies ist ein sehr spezieller Anwendungsfall, in dem wir einen einzigen Dienst muss mehrmals aufgerufen werden, wenn die Komponente initialisiert, und wo der service zu vervollständigen Holen und einen Wert zurückgeben, bevor Sie erneut aufgerufen werden kann, aber in diesem Fall, das Versprechen /.dann war die Methode ideal.
scan()
zu bauen, ein Strom von aufeinanderfolgenden observablen. Aber deine Herangehensweise ist vielleicht noch deutlicher und einfacher zu verstehen.async
/await
?async initializeDropDowns() { this.firstValList = await this.fetchValueList('First-Val-List'); this.secondValList = await this.fetchValueList('Second-Val-List'); this.thirdValList = await this.fetchValueList('Third-Val-List'); }
async
/await
hier ist ein großartiges Beispiel für Verspricht wird sauberer und einfacher zu Lesen, dass die Observablen. Obwohl, ich würde wirklich schauen, warum das back-End-Dienst kann nicht in der Lage mehrere gleichzeitige Anrufe. Was ist, wenn ein Benutzer verfügt über zwei Registerkarten öffnen, um Ihre Seite? Oder wenn Sie zwei Benutzer...Versprechen:
Beobachtbar ist:
, Die Sie verwenden können, verspricht stattdessen der observablen beim Aufruf von HTTP in Eckigen wenn Sie es wünschen.
Überblick:
Können Sie immer eine beobachtbare für den Umgang mit asynchronen Verhalten, da ein beobachtbares hat alle Funktionen, die ein Versprechen bietet (+ extra). Aber manchmal wird diese zusätzliche Funktionalität, die Observablen Angebot ist nicht erforderlich. Dann wäre es zusätzlicher Aufwand durch das importieren einer Bibliothek für Sie, um Sie zu benutzen.
Wann Verspricht:
Nutzen Versprechen, wenn Sie haben eine single asynchronen operation, die Sie verarbeiten möchten, das Ergebnis. Zum Beispiel:
So ein Versprechen führt einige code, wo es entweder beschließt oder ablehnt. Wenn entweder resolve oder reject aufgerufen wird, die Verheißung geht von einem Status "pending" entweder eine gelöst oder abgelehnt Zustand. Wenn Sie das Versprechen Staat gelöst werden, die
then()
- Methode aufgerufen wird. Wenn Sie das Versprechen Staat abgelehnt, diecatch()
- Methode aufgerufen wird.Wann Observablen:
Verwenden Observablen, wenn es eine stream (Daten -) im Laufe der Zeit, die Sie behandelt werden müssen. Ein stream ist eine Sequenz von Daten-Elemente, die zur Verfügung gestellt werden, im Laufe der Zeit. Beispiele für Datenströme sind:
er schiebt Daten im Laufe der Zeit.
In der öffentlichkeit selbst wird angegeben, wenn die nächste Veranstaltung passiert, wenn ein Fehler tritt auf,, oder wenn die Observable ist abgeschlossen. Dann können wir abonnieren dieses observable, die aktiviert werden und in diesem Abo-dann können wir auch in 3 Rückrufe (nicht immer passieren müssen in allen). Ein Rückruf, der ausgeführt werden für den Erfolg, die eine callback-für Fehler, und ein callback für die Fertigstellung. Zum Beispiel:
Beim erstellen einer beobachtbaren es erfordert eine callback-Funktion, die liefert ein Beobachter als ein argument. Auf dieser Beobachter, die Sie dann aufrufen können
onNext
,onCompleted
,onError
. Dann, wenn die Observable ist, die er abonniert ruft die entsprechenden callbacks übergeben in das Abonnement.Versprechen - Geben Sie einen einzelnen Wert in der Zukunft. Nicht faul . Nicht Abbrechen können. Es wird entweder ablehnen oder auflösen.
Beobachten - Bieten mehrere Wert in der Zukunft. Faul . Abbrechen können . Es werden weitere Methoden live-map,filter,reduce.
Below are some important differences in promises & Observables.
Versprechen
Beobachtbaren
Zum besseren Verständnis beziehen sich auf die https://stackblitz.com/edit/observable-vs-promises
Kurze Antwort :
Beobachtbaren ist besser, es hat alle Verspricht - Funktionen sowie zusätzliche Funktionen.
Lange Antwort:
Verspricht:
Beobachten:
Während die akzeptierte Antwort ist im Allgemeinen gut, ich glaube nicht, dass es unterstreicht, dass beim Umgang mit Kantigen Komponenten, die Sie fast immer verwenden möchten, eine Beobachtbare, denn es unterstützt Kündigung. Versprechungen können nicht storniert werden und wird zu lösen, auch wenn die Komponente zerstört wird. Winkel neigt, nicht nachtragend zu sein, bis es nicht.
Beispielsweise eine manuelle change detection auf eine zerstörte Komponente zu einer Ausnahme führen:
Wenn die Komponente zerstört wird, bevor das Versprechen aufgelöst wird, erhalten Sie eine
attempt to use destroyed view
Fehler, wenn das Versprechen aufgelöst wird.Alternativ, wenn Sie mit der observablen mit der takeUntil Muster, dann, sobald die Komponente zerstört wird, wird das Abonnement gekündigt werden.
Dies ist ein bisschen ein erfundenes Beispiel, aber der Ausführung von code für eine Komponente, die zerstört wird, wird wahrscheinlich dazu führen Sie zu Fehlern. Es sei denn, Sie wirklich wollen, zu tun, dass aus irgendeinem Grund :p
Etwas, das ich lief in das war nicht ersichtlich aus einer ersten Lektüre des Tutorials und docs war die Idee von multicasting.
Stellen Sie sicher, Sie sind sich bewusst, dass in der Standardeinstellung mehrere Abonnements auslösen werden mehrere Ausführungen in einem Beobachtbaren. Mehrere Abonnements für einen einzigen HTTP-Aufruf Beobachtbaren auslösen werden mehrere identische HTTP-Aufrufe, es sei denn, Sie
.share()
(aktivieren von multicasting).Ein Versprechen zwingt Sie, sich zu beschäftigen mit einer Sache zu einer Zeit, packen Sie Ihre Daten, die Ausnahmen behandeln, hat die Sprache Unterstützung für Coole Dinge wie async/await, und ist ziemlich barebones sonst.
Einen Beobachtbaren hat viele Glocken und Pfeifen, aber Sie müssen verstehen, die macht, mit der Sie arbeiten, oder es kann missbraucht werden.
Versprechen:
Einen Asynchronen Ereignishandler, Das Promise-Objekt repräsentiert die schließliche Vollendung (oder Misserfolg) eines asynchronen Betrieb, und die sich daraus ergebenden Wert.
Syntax: neue Versprechen(executor);
ZB:
Zu Versprechen:
Es wurde ein pipeline-so wird es wieder Werte, die nur einmal bei Ihr angerufen.
sein ein Weg-handler so einmal genannt, Sie möglicherweise nicht in der Lage, um abzubrechen.
nützliche syntax können Sie spielen, um, wenn() und dann()
Observablen:
Observablen faul sind Sammlungen von mehreren Werten über die Zeit. es ist wirklich ein tolles Konzept für asynchrone Operationen. es kann getan werden, mit rxjs die cross-Plattform-Unterstützung können mit eckig/reagieren etc.
seine handeln, wie stream liner. kann multi-pipeline.
also einmal definiert, können Sie abonnieren, erhalten Sie Ergebnisse zurück, in vielen stellen.
Syntax:
import * as Rx from "@reactivex/rxjs";
init:
etc
abonnieren:
RxLogger.getInstance();
ZB:
da es Unterstützung für multi-pipeline, den man abonnieren kann dazu führen, dass verschiedene Lage,
es hat viel Möglichkeiten als verspricht.
Verwendung:
es hat mehr Möglichkeiten wie
map, filter, pipe, map, concatMap etc
Ich sehe eine Menge Leute mit dem argument, die Beobachtbar sind "kündbar", aber es ist ziemlich trivial zu machen Versprechen "kündbar"
JS:
Versprechen vs Beobachtbare ähnlichkeit erste
Beobachtbare Beispiel jetzt. Auch hier passieren wir eine-Funktion, um zu beobachten, einen Beobachter zu behandeln das asynchrone Aufgabe. Im Gegensatz zu beheben, in dem Versprechen, es hat sich die folgende Methode und abonniert im Ort dann.
Also beide Griffe asynchrone Aufgaben. Schauen wir uns jetzt den Unterschied.
Versprechen vs Beobachtbaren Unterschied
Versprechen
Beobachtbaren
Observablen und Verspricht, Sie helfen uns die Arbeit mit der asynchronen Funktionen in JavaScript/typescript. Sie sind sich sehr ähnlich, in vielen Fällen, es gibt jedoch immer noch einige Unterschiede zwischen Ihnen.
Den grundlegenden Unterschied zwischen beobachtbaren und verspricht sind:
Gibt es viele Antworten zu diesem Thema bereits, so würde ich nicht fügen Sie eine redundante ein.
Aber für jemanden, der gerade angefangen zu lernen, Beobachtbaren /Winkel und Wunder, die man zu nutzen vergleichen mit Versprechen, ich würde empfehlen, Sie halten alles, was Beobachtbar und konvertieren Sie alle vorhandenen Verspricht in Ihrem Projekt zu Beobachten.
Einfach, weil Eckige Rahmen sich selbst und die Gemeinschaft aller mit zu Beobachten. Es wäre also vorteilhaft, wenn die Integration framework-Dienste oder 3rd-party-Module und Verkettung alles zusammen.
Während ich schätzen die downvotes, aber ich immer noch darauf bestehen, meine Meinung oben, es sei denn, jemand hat einen richtigen Kommentar zu der Liste ein paar Szenarien, die vielleicht noch nützlich sein, in Ihrer Kantigen Projekt Verspricht über Observablen.
Natürlich, keine Meinung ist zu 100% richtig in allen Fällen, aber zumindest glaube ich, dass 98% der Zeit, die für reguläre kommerzielle Projekte umgesetzt werden, die in Eckigen Rahmen, Beobachten, den richtigen Weg zu gehen.
Selbst wenn Sie nicht, wie es am Ausgangspunkt Ihrer einfachen hobby-Projekt, werden Sie bald merken fast alle Komponenten, die Sie interagieren mit in schräg, und die meisten der Winkelposition der freundliche 3rd-party-framework verwenden Observablen, und dann werden Sie landeten ständig konvertieren Sie Ihre Versprechen zu Beobachten, um mit Ihnen zu kommunizieren.
Diejenigen Komponenten beinhaltet, ist aber nicht beschränkt auf: HttpClient -, Formular-generator, Winkel-material-Module/Dialoge, Ngrx-Shop/Effekte und ngx-bootstrap.
In der Tat, das einzige Versprechen von Winkel-öko-system mit dem ich gearbeitet habe in den letzten 2 Jahren ist
APP_INITIALIZER
.