Start · Sprachen · JavaScript · Referenz · SpeechSynthesis.pending

SpeechSynthesis.pending

Eigenschaft

Schreibgeschützter boolescher Wert, der <code>true</code> ist, wenn in der Warteschlange der Sprachausgabe noch Äußerungen warten, die bisher nicht gesprochen wurden.

seit JavaScript Baseline: alle modernen Browser (seit 2018) Kategorie: webapi

Signatur

SpeechSynthesis.pending

Beschreibung

Die Eigenschaft pending des Interfaces SpeechSynthesis (erreichbar über window.speechSynthesis) zeigt, ob in der Warteschlange noch SpeechSynthesisUtterance-Objekte liegen, deren Ausgabe noch nicht begonnen hat.

Wichtig ist die Abgrenzung zu speaking: Die gerade gesprochene Äußerung zählt nicht als „pending“. Liegt nur eine einzige Äußerung in der Warteschlange und wird sie gerade gesprochen, ist speaking gleich true und pending gleich false. Erst wenn danach weitere Äußerungen warten, wird pending zu true.

Die Eigenschaft eignet sich zum Beispiel dazu, doppelte Ansagen zu vermeiden, eine Anzeige „weitere Ansagen folgen“ zu steuern oder vor einem neuen speak()-Aufruf zu entscheiden, ob die Warteschlange mit cancel() geleert werden soll.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn mindestens eine Äußerung in der Warteschlange wartet, die noch nicht gesprochen wird, sonst false.

Beispiele

Unterschied zwischen pending und speaking

const synth = window.speechSynthesis;

synth.speak(new SpeechSynthesisUtterance('Erster Satz.'));
synth.speak(new SpeechSynthesisUtterance('Zweiter Satz.'));

// Kurz danach: der erste Satz wird gesprochen, der zweite wartet
setTimeout(() => {
  console.log('speaking:', synth.speaking);
  console.log('pending:', synth.pending);
}, 200);
speaking: true pending: true

Doppelte Ansagen in einer Warteschlange vermeiden

const synth = window.speechSynthesis;

const announce = (text) => {
  // Wenn schon Ansagen warten, alte verwerfen und nur die neueste ausgeben
  if (synth.pending) {
    synth.cancel();
  }
  const utterance = new SpeechSynthesisUtterance(text);
  utterance.lang = 'de-DE';
  synth.speak(utterance);
};

document.querySelector('#weiter').addEventListener('click', () => {
  announce('Nächster Schritt');
});

Statusanzeige für wartende Ansagen

const synth = window.speechSynthesis;
const status = document.querySelector('#status');

const updateStatus = () => {
  status.textContent = synth.pending
    ? 'Weitere Ansagen folgen …'
    : synth.speaking ? 'Letzte Ansage läuft' : 'Bereit';
};

['Willkommen.', 'Bitte wählen Sie eine Option.', 'Danke.'].forEach((text) => {
  const u = new SpeechSynthesisUtterance(text);
  u.addEventListener('start', updateStatus);
  u.addEventListener('end', () => setTimeout(updateStatus, 0));
  synth.speak(u);
});

// Wichtig · Fallstricke

  • Nur lesbar: Eine Zuweisung an pending wird still ignoriert (im Strict Mode kann ein TypeError auftreten).
  • Nicht mit speaking verwechseln: Die gerade laufende Äußerung zählt nicht mit. Um zu prüfen, ob überhaupt etwas läuft oder wartet, verwendet man synth.speaking || synth.pending.
  • Zeitverhalten: Direkt nach speak() kann der Wert je nach Browser kurzzeitig true sein, obwohl die Ausgabe gleich beginnt. Den Wert besser in Event-Handlern (start, end) auswerten statt synchron.
  • Pausieren: Nach pause() bleibt pending true, solange noch Äußerungen warten. Chrome beendet lange Ausgaben teils nach etwa 15 Sekunden ohne Rückmeldung, was die Statuswerte verfälschen kann.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. Vor der Nutzung sollte man mit 'speechSynthesis' in window prüfen, ob die API verfügbar ist. Ohne vorherige Nutzerinteraktion blockieren manche Browser die Ausgabe.