*Observables * und *Promises * werden beide zur Verarbeitung asynchroner Vorgänge in JavaScript verwendet, weisen jedoch einige wesentliche Unterschiede auf:
Versprechen
- Einzelwert: Versprechen verarbeiten ein einzelnes asynchrones Ereignis und geben einen einzelnen Wert (oder Fehler) zurück.
- Eifrig: Versprechen werden sofort nach der Erstellung ausgeführt.
- Nicht stornierbar: Sobald ein Versprechen initiiert wurde, kann es nicht storniert werden.
- Syntax: Verwendet .then(), .catch() und .finally() zum Verketten von Operationen.
Beispiel:
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise resolved!');
}, 1000);
});
promise.then((value) => {
console.log(value);
});
Nach dem Login kopieren
Observablen
- Mehrere Werte: Observable können im Laufe der Zeit mehrere Werte ausgeben.
- Lazy: Observables beginnen erst dann mit der Ausgabe von Werten, wenn sie abonniert wurden.
- Kündigbar: Abonnements für Observables können gekündigt werden, wodurch die Ausgabe von Werten gestoppt wird.
- Syntax: Verwendet .subscribe(), um ausgegebene Werte, Fehler und Vervollständigung zu verarbeiten.
Beispiel:
import { Observable } from 'rxjs';
const observable = new Observable((subscriber) => {
subscriber.next('First value');
setTimeout(() => {
subscriber.next('Second value');
subscriber.complete();
}, 1000);
});
const subscription = observable.subscribe({
next(value) {
console.log(value);
},
complete() {
console.log('Observable complete');
}
});
// To cancel the subscription
subscription.unsubscribe();
Nach dem Login kopieren
Wann jeweils zu verwenden ist
- Verwenden Sie Promises, wenn Sie einen einzelnen asynchronen Vorgang abwickeln müssen.
- Verwenden Sie Observables, wenn Sie mehrere asynchrone Ereignisse oder Werte im Laufe der Zeit verarbeiten müssen und wenn Sie mehr Kontrolle über den Datenstrom benötigen (z. B. Stornierung, Transformation).
Das obige ist der detaillierte Inhalt vonBeobachtbar vs. Versprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!