Subscriber: Eigenschaft signal
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die schreibgeschützte Eigenschaft signal der Schnittstelle Subscriber stellt ein AbortSignal bereit, das abgebrochen wird, wenn das Abonnement endet. Ein Produzent kann dieses Signal an APIs wie fetch() übergeben, um nicht mehr benötigte Vorgänge abzubrechen.
Wert
Ein intern erzeugtes AbortSignal. Es wird abgebrochen, wenn Subscriber.complete() oder Subscriber.error() aufgerufen wird oder wenn sich alle Beobachter abmelden.
Beschreibung
Dieses Signal ist ein anderes Objekt als ein Signal, das an Observable.subscribe() übergeben wird. Ein an subscribe() übergebenes Signal steuert die damit angemeldeten Beobachter; subscriber.signal überwacht das gemeinsame Abonnement. Wenn sich ein Beobachter abmeldet, wird subscriber.signal nicht abgebrochen, solange noch andere Beobachter angemeldet sind.
Hinweis:
Dieses Verhalten des gemeinsamen Abonnements könnte sich ändern. Ein Vorschlag, jedem Beobachter einen eigenen Subscriber zuzuweisen, würde dazu führen, dass jedes Abonnement eine separate Ausführung startet, statt eine aktive Ausführung wiederzuverwenden.
Für Aufräumarbeiten ohne eine API, die ein AbortSignal akzeptiert, verwenden Sie Subscriber.addTeardown(). Anders als bei der Registrierung eines abort-Event-Listeners führt addTeardown() den Callback auch sofort aus, wenn der Subscriber bereits inaktiv ist.
Beispiele
>Eine fetch-Anfrage abbrechen
Dieses Beispiel kapselt eine Anfrage an /data.json in einem Observable. Durch die Übergabe von subscriber.signal an fetch() wird die Anfrage an die Lebensdauer des Abonnements gebunden.
const observable = new Observable((subscriber) => {
fetch("/data.json", { signal: subscriber.signal })
.then((response) => {
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
return response.json();
})
.then((data) => {
subscriber.next(data);
subscriber.complete();
})
.catch((error) => {
if (subscriber.active) {
subscriber.error(error);
}
});
});
const controller = new AbortController();
observable.subscribe(
{
next(data) {
console.log(data);
},
error(error) {
console.error(error);
},
},
{ signal: controller.signal },
);
// To cancel the subscription and any pending request:
// controller.abort();
Wird controller.abort() aufgerufen, während die Anfrage noch aussteht, meldet sich der einzige Beobachter ab. Dadurch wird subscriber.signal abgebrochen und die Anfrage beendet. Der Handler für die Ablehnung des Promise prüft subscriber.active, damit der Abbruch nicht zu einem Aufruf von error() bei einem inaktiven Subscriber führt, der einen Fehler an das globale Objekt melden würde.
Bei Erfolg sendet der Produzent die geparsten Daten und schließt das Abonnement ab. Anfragefehler werden an den error-Callback des Beobachters weitergeleitet, solange das Abonnement aktiv ist.
Spezifikationen
| Spezifikation |
|---|
| Observable> # dom-subscriber-signal> |