Start · Sprachen · JavaScript · Referenz · BackgroundFetchRegistration.result

BackgroundFetchRegistration.result

Eigenschaft

Schreibgeschützter String, der angibt, ob ein Hintergrundabruf erfolgreich war (<code>"success"</code>), fehlgeschlagen ist (<code>"failure"</code>) oder noch läuft (<code>""</code>).

seit JavaScript Experimentell: nur Chromium-Browser (Chrome/Edge 7 Kategorie: webapi

Signatur

BackgroundFetchRegistration.result

Beschreibung

Die schreibgeschützte Eigenschaft result des Interfaces BackgroundFetchRegistration gibt den Endzustand eines Hintergrundabrufs (Background Fetch) an. Solange der Abruf noch läuft, ist der Wert ein leerer String "". Ist er abgeschlossen, lautet der Wert entweder "success" oder "failure".

Im Zusammenspiel mit failureReason lässt sich genau feststellen, warum ein Abruf fehlgeschlagen ist, z. B. wegen Abbruch durch Nutzer ("aborted"), fehlerhaftem HTTP-Status ("bad-status"), Netzwerkfehler ("fetch-error"), überschrittenem Speicherkontingent ("quota-exceeded") oder überschrittener downloadTotal-Angabe ("download-total-exceeded").

Die Eigenschaft ist vor allem im Service Worker in den Ereignissen backgroundfetchsuccess und backgroundfetchfail nützlich, sowie in der Seite über das progress-Ereignis der Registrierung, um den Abschluss zu erkennen und die Oberfläche anzupassen.

Rückgabewert

Typ
"" | "success" | "failure"
Beschreibung
"", solange der Abruf nicht abgeschlossen ist; "success" bei erfolgreichem Abschluss aller Anfragen; "failure", wenn mindestens eine Anfrage fehlgeschlagen ist oder der Abruf abgebrochen wurde.

Beispiele

Ergebnis im Service Worker auswerten

// sw.js
const handleFetchDone = async (event) => {
  const reg = event.registration;
  console.log(`Abruf ${reg.id}: ${reg.result}`);

  if (reg.result === 'success') {
    const records = await reg.matchAll();
    const cache = await caches.open('downloads');
    await Promise.all(records.map(async (record) => {
      const response = await record.responseReady;
      await cache.put(record.request, response);
    }));
    await event.updateUI({ title: 'Download abgeschlossen' });
  } else {
    console.warn('Grund:', reg.failureReason);
  }
};

self.addEventListener('backgroundfetchsuccess', (event) => event.waitUntil(handleFetchDone(event)));
self.addEventListener('backgroundfetchfail', (event) => event.waitUntil(handleFetchDone(event)));
Abruf podcast-42: success

Fortschritt und Abschluss in der Seite verfolgen

const startDownload = async () => {
  const swReg = await navigator.serviceWorker.ready;
  if (!('backgroundFetch' in swReg)) {
    console.log('Background Fetch wird nicht unterstützt');
    return;
  }

  const bgFetch = await swReg.backgroundFetch.fetch('film-1', ['/media/film-1.mp4'], {
    title: 'Film herunterladen',
    downloadTotal: 60 * 1024 * 1024
  });

  console.log('Start:', JSON.stringify(bgFetch.result)); // ""

  bgFetch.addEventListener('progress', () => {
    if (!bgFetch.result) {
      console.log(`${Math.round(bgFetch.downloaded / bgFetch.downloadTotal * 100)} %`);
      return;
    }
    console.log('Fertig mit Ergebnis:', bgFetch.result, bgFetch.failureReason);
  });
};

startDownload();
Start: "" 25 % ... Fertig mit Ergebnis: success

Status bestehender Abrufe prüfen

const listFetches = async () => {
  const swReg = await navigator.serviceWorker.ready;
  const ids = await swReg.backgroundFetch.getIds();
  for (const id of ids) {
    const reg = await swReg.backgroundFetch.get(id);
    console.log(id, reg.result === '' ? 'läuft noch' : reg.result);
  }
};

listFetches();
film-1 läuft noch

// Wichtig · Fallstricke

  • Kompatibilität: Die Background Fetch API ist experimentell und nur in Chromium-basierten Browsern verfügbar. Immer per 'backgroundFetch' in registration prüfen und eine Alternative (normales fetch()) bereithalten. Nur in sicheren Kontexten (HTTPS) nutzbar.
  • Ein leerer String ist falsy – if (!reg.result) bedeutet „noch nicht abgeschlossen“, nicht „fehlgeschlagen“.
  • "failure" sagt allein nichts über die Ursache aus; dafür failureReason auswerten. Bei Abbruch durch Nutzer wird zusätzlich das Ereignis backgroundfetchabort statt backgroundfetchfail ausgelöst.
  • Die Eigenschaft ist schreibgeschützt; Zuweisungen werden ignoriert (im Strict Mode TypeError).
  • Auch bei "success" sollten die einzelnen Antworten (response.ok) geprüft werden, bevor sie im Cache landen.