Antworten 1:

Observables und Promises bieten eine Möglichkeit, mit asynchronen Aktivitäten in JavaScript zu arbeiten. Während Promises entweder basierend auf dem Abschluss eines einzelnen asynchronen Ereignisses (http-Anfrage) ablehnen / auflösen, können Observables basierend auf den Beobachtern, die sie abonnieren, kontinuierlich Statusänderungen ausgeben.

Weitere Informationen finden Sie unter Observables in 5 Minuten.



Antworten 2:

Abgesehen von den bereits auf diese Frage gestellten Antworten besteht ein grundlegender Unterschied zwischen Versprechen und Observablen darin, dass die Observablen Möglichkeiten bieten, eine Anforderung abzubrechen und eine neue Anforderung erneut zu senden. Wo als Versprechen solche Eigenschaft nicht erlauben.

Beispielsweise

Wenn Sie eine bestimmte Ressource abrufen möchten und die URL aufgerufen haben, können Sie dieselbe URL erneut mit verschiedenen Parametern aufrufen. Mit Observable wird die frühere Anforderung mit alten Parametern jetzt abgebrochen und Sie rufen Daten ab, die für die mit der zweiten Anforderung gesendeten Parameter relevant sind.

In Versprechungen könnten in diesem Fall zwei Anfragen gesendet werden und entsprechende Daten würden für jede Anfrage, die Sie gestellt haben, abgerufen werden



Antworten 3:

Ein Versprechen gibt ein bestimmtes Ergebnis zurück oder wirft einen Fehler aus. Das Ergebnis ist sofort sichtbar und ist erledigt, wenn eine Antwort eingeht.

Andererseits können Sie mit einem Observable eine Operation abonnieren, die eine Antwort zurückgibt, aber erst beendet wird, wenn Sie sich von ihr abmelden. Möglicherweise erhalten Sie jetzt eine Antwort, einige Zeit später eine weitere Antwort von derselben Operation.

Ein beispielhafter Anwendungsfall für Observable ist die Überprüfung des Netzwerkstatus in einer App, die nur mit Internetzugang funktioniert. Wir können das Netzwerkänderungsereignis beim Öffnen der App abonnieren. Wenn das Gerät die Internetverbindung verliert, erhält das Observable ein Update und kann dem Benutzer einen Fehler anzeigen, z. B. „Kein Internetzugang“. Auf diese Weise müssen wir nicht alle fünf Sekunden eine Funktion auslösen, um zu überprüfen, ob das Gerät über einen Internetzugang verfügt. Der Observable-Beobachter erledigt dies für uns.



Antworten 4:

Mit einem Wort, zählen. Das Versprechensmuster behandelt genau ein mögliches Ergebnis. Observable handelt von mehr als einem zukünftigen Wert.

Beides sind Muster, die Rückruf-Hooks bereitstellen. In herkömmlichen asynchronen Funktionen stellen Sie einen Rückruf als letzten oder ersten Parameter für eine asynchrone Funktion bereit. Dieser Rückruf ist eine Funktion selbst (entweder direkt inline definiert oder ein Verweis auf eine zuvor definierte Funktion). In solchen Strukturen ist der Rückruf die einzige Möglichkeit, mit der die asynchrone Funktion ihr Ergebnis verfügbar machen kann. Die asynchrone Funktion erledigt das (oft Netzwerk- oder Festplattenzugriff, manchmal aber auch eine Animation oder ähnliches) und ruft dann die Rückruffunktion auf.

Im Versprechungsmuster nimmt die asynchrone Funktion überhaupt keinen Rückruf entgegen. Stattdessen gibt es ein Versprechen zurück. Ein Versprechen ist einfach ein zukünftiger Wert. (Einige Sprachen bezeichnen die äquivalente Struktur als Zukunft). Versprechungen haben immer einen Status, entweder ausstehend, gelöst oder abgelehnt. Wenn sie aufgelöst oder abgelehnt werden, haben sie auch einen Wert, der das Ergebnis oder der Fehler ist. Dann werden auf dem Versprechen registrierte Rückrufe (durch .then und .catch auf dem ursprünglichen Versprechungsobjekt) in der Reihenfolge aufgerufen, in der sie mit dem Ergebnis oder Fehler registriert wurden, je nachdem, wie die Rückrufe registriert wurden.

In der Zwischenzeit existiert das beobachtbare Muster, um ein veränderliches Ergebnis freizulegen. Die Idee mit dem beobachtbaren Muster (wie durch knockout.js und rx.js bekannt gemacht) ist, dass eine einzelne beobachtbare Variable tatsächlich mehrere Male aufgerufen werden kann, wenn sich die Daten ändern. Wenn also ein Observable belichtet wird (entweder auf einer API-Ebene oder als Ergebnis einer Funktion), erhalten Sie die Meldung, dass die ersten Daten nicht die letzten Daten sind, die Sie erhalten. Der Rückruf, der für ein Observable bereitgestellt wird, wird in der Regel mehrmals aufgerufen, wenn sich die durch das Observable dargestellten Daten ändern.

Während das Versprechungsmuster einen Anruf Ihres Rückrufs garantiert (vorausgesetzt, Sie haben einen Rückruf für Erfolg und Fehler eingerichtet) und nicht mehr als einen, zeigt das beobachtbare Muster an, dass Sie mit der Entwicklung der Daten wahrscheinlich mehr als einmal angerufen werden.