Was sind die Unterschiede zwischen Observablen und Versprechen in JavaScript?
Also ich habe gelesen, dass die observablen suchen, um zu überholen Versprechen in Bezug auf die Verwendung in einigen der kommenden JavaScript-MVC-s:
Was ist der Unterschied zwischen observablen und verspricht?
Aktualisiert Am: Entschuldigung! entfernt meine falsy-Anweisung.
InformationsquelleAutor der Frage chrisjlee | 2016-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach ausgedrückt: Ein Versprechen wird in einen single Wert asynchron, eine beobachtbare aufgelöst wird (oder emittiert) mehrere Werte asynchron (über die Zeit).
Konkrete Beispiele:
Mehr Informationen finden Sie hier: http://reactivex.io/intro.html
Unwahrscheinlich. Observablen wäre die bessere Lösung für bestimmte Probleme, aber, die nicht Versprechungen machen die veralteten (wenn es das ist was du meinst).
InformationsquelleAutor der Antwort Felix Kling
Verspricht eine Darstellung der 1 Wert in der Zukunft.
Observablen sind ein Symbol für eine möglicherweise unendliche Menge von Werten.
Verspricht, löst das abrufen des Werts sofort nach der Erstellung.
Observablen nur die Produktion Werte, wenn Sie abonnieren Sie. (Es sei denn, es ist ein heißes beobachten, aber das ist außerhalb des Anwendungsbereichs dieser Frage)
Versprechungen sind entworfen, um darzustellen, AJAX-Aufrufe.
Observablen sind entworfen, um alles darstellen: Ereignisse, Daten aus Datenbanken, Daten aus ajax-Aufrufe, die (möglicherweise unendliche) Sequenzen, etc.
InformationsquelleAutor der Antwort Moeri
Verspricht bieten eine sehr einfache call-back-Mechanismus, wo die als Rx bietet eine leistungsfähige Abstraktion über die asynchrone Programmierung. Eine Observable entspricht ein Strom von Daten, die wir dann anwenden können-Betreiber, um zu definieren, wie die eingehenden Daten behandelt werden sollen.
Wenn alles, was Sie tun müssen, ist, eine HTTP-Anforderung, und aktualisieren Sie dann eine UI-Komponente, dann mit einem Versprechen ausreichen könnte.
Jedoch die meisten apps haben eher kompliziert muss als, (auch wenn es nicht offensichtlich auf den ersten). Unter unseren HTTP-Anfrage für Beispiel, lasst uns sehen, wie die Modellierung dieser als eine Beobachtbare und mit einigen der Rx-Operatoren können uns helfen:
-Wenn der HTTP-request wird ausgelöst durch eine user-Aktion, vielleicht wollen wir vorsichtig sein, der Abschuss aus mehreren HTTP-Anfragen (stellen Sie sich eine Benutzer-Eingabe in einem Suchfeld). Wir wollen nicht Feuer eine Anforderung für jeder Tastenanschlag, so dass wir vielleicht möchten Gas unsere Suche, so dass wir nur Feuer-eine Anforderung, wenn der Benutzer beendet die Eingabe für 300ms. Darüber hinaus, wenn der Nutzer ein Wort eingibt, wartet 300ms, und fügt ein weiteres Zeichen, werden wir das Feuer aus eine nachfolgende HTTP-Anfrage. Mit dem Versprechen, wir würden wahrscheinlich stoßen eine race-Bedingung, da wir keine Kontrolle über die Reihenfolge, in der wir erhalten die Antworten und wir können nicht stornieren alte Anfragen. Rx löst dieses Problem, indem Sie uns erlauben, zu Schalter zwischen streams, die fordert, Entsorgen auf die alte Anfrage Abonnements, die wir nicht mehr kümmern. Wir könnten auch herausfiltern, die unwirksamen Suche-Eingänge, zum Beispiel Wo der Suchbegriff ist weniger als 3 Zeichen lang ist.
-Unterstützung für den Umgang mit Timeouts/Fehler-handling. Lassen Sie uns sagen, dass unsere HTTP-Anforderung schlägt fehl, Rx ermöglicht es uns zu leicht Wiederholen Anfrage.
-Sagen wir mal mehrere Teile unserer Anwendung benötigen, um die gleichen HTTP-Aufruf, wir wollen wahrscheinlich nicht, um tatsächlich den Anruf mehr als einmal. Wir setzen unsere beobachtbare mehrere Verbraucher und verwenden Sie Replayum sicherzustellen, dass der Aufruf wird einmal gemacht und das Ergebnis zwischengespeichert wird, für spätere Abonnenten. Wir können auch liefern eine Zeitspanne Wiedergeben, was uns die auslaufenden cache-Verhalten.
-Kraftvolle Abstraktion über Gewindeschneiden durch den Einsatz von Schedulern, die es uns ermöglicht, die Kontrolle von Parallelität. Noch besser, wir können Test-Planer in unseren Unit-Tests, die Zeit zu kontrollieren, ermöglicht es uns zu simulieren, Timeouts, race conditions etc.
Diese sind einige kurze Beispiele, um zu demonstrieren, was möglich ist. Es gibt noch viele weitere Operatoren, die innerhalb der Rx Rahmen zu bieten für alle Arten von Szenarien und die Kombinierbarkeit der Rx bedeutet, dass Sie leicht kombinieren können Operatoren zu definieren, die das Verhalten, die Sie benötigen. Es ist auch ganz einfach erstellen Sie Ihre eigenen wiederverwendbaren Operatoren (z.B. RetryAfterDelay).
In der Zusammenfassung, Rx kann alles nur Versprechungen machen kann, und weit, weit mehr. Ich vermute, in den nächsten paar Jahren werde es eine weitere Verlagerung in Richtung Rx-statt Versprechungen.
Zur weiteren Lektüre empfehle ich Ihnen, einen Blick in den Abschnitt über die Observablen in der Eckige 2-Anleitung.
InformationsquelleAutor der Antwort domino
wie gesagt in Eckige 2-guid
Umstellung auf ein Versprechen ist oft eine gute Wahl, wenn Sie möchten, Holen ein einziges Stück von Daten. also, Wenn Sie die Daten empfangen haben, sind Sie fertig.
Aber in einigen Fällen die Anfragen sind nicht immer nur einmal gemacht. Sie können starten Sie eine Anfrage, Abbrechen, und stellen Sie eine andere Anfrage, bevor der server hat
als Reaktion auf die erste Anfrage.
beispielsweise bei einer Suche Komponente während der Benutzer tippt einen Namen in das Suchfeld, werden Sie wiederholt werden HTTP-Anfragen durch, die auf die Suchanfrage.
also, wenn Sie Ihre Komponente erhält Daten nur mit einer Anfrage ist es eine gute Wahl
Promise
aber wenn es eine Kette von Anfrage-Abbrechen-neue Anfrage, die Sie verwenden solltenobservable
InformationsquelleAutor der Antwort Parid0kht
Observablen sind oft im Vergleich zu verspricht. Hier sind einige der wichtigsten Unterschiede:
Observablen sind deklarativ; Berechnung wird erst gestartet, wenn das Abonnement. Verspricht sofort ausführen, die auf die Bildung. Dies macht observablen nützlich für die Definition von Rezepten, die ausgeführt werden können, Wann immer Sie brauchen das Ergebnis.
Observablen liefern viele Werte. Verspricht. Dies macht observablen nützlich für das abrufen mehrerer Werte über die Zeit.
Observablen unterscheiden zwischen Verkettung und Abonnement. Versprechungen haben nur .dann () - Klauseln. Dies macht observablen nützlich für die Erstellung von komplexen Transformations-Rezepte verwendet werden, die von anderen Teil des Systems, ohne dass die Arbeit ausgeführt werden soll.
Observablen subscribe() ist verantwortlich für den Umgang mit Fehlern. Verspricht der push-Fehler, um das Kind verspricht. Dies macht observablen nützlich, für die zentrale und vorhersehbaren Fehler-handling.
Beste Erklärung, die von eckig auf der offiziellen website :
https://angular.io/guide/comparing-observables
InformationsquelleAutor der Antwort asad mohd