Signatur
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
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);
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
pendingwird still ignoriert (im Strict Mode kann einTypeErrorauftreten). - Nicht mit
speakingverwechseln: Die gerade laufende Äußerung zählt nicht mit. Um zu prüfen, ob überhaupt etwas läuft oder wartet, verwendet mansynth.speaking || synth.pending. - Zeitverhalten: Direkt nach
speak()kann der Wert je nach Browser kurzzeitigtruesein, obwohl die Ausgabe gleich beginnt. Den Wert besser in Event-Handlern (start,end) auswerten statt synchron. - Pausieren: Nach
pause()bleibtpendingtrue, 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 windowprüfen, ob die API verfügbar ist. Ohne vorherige Nutzerinteraktion blockieren manche Browser die Ausgabe.