SyntaxError: await/yield expression kann nicht im Parameter verwendet werden

Die JavaScript-Ausnahme "await expression can't be used in parameter" oder "yield expression can't be used in parameter" tritt auf, wenn der Standardparameter den Ausdruck await oder yield enthält und die Auswertung des Standardparameters pausiert.

Meldung

SyntaxError: Illegal await-expression in formal parameters of async function (V8-based)
SyntaxError: await expression can't be used in parameter (Firefox)
SyntaxError: Cannot use 'await' within a parameter default expression. (Safari)

SyntaxError: Yield expression not allowed in formal parameter (V8-based)
SyntaxError: yield expression can't be used in parameter (Firefox)
SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression within parameters. (Safari)

Fehlertyp

Was ist schief gelaufen?

Der Standardausdruck muss synchron ausgewertet werden können. Falls er einen await- oder yield-Ausdruck enthält, pausiert dies die Auswertung des Standardausdrucks, was nicht erlaubt ist.

Hinweis: Dieser Fehler wird nur generiert, wenn await oder yield gültige Operatoren in diesem Funktionskontext sind. Andernfalls würden await oder yield als Bezeichner geparst, was entweder keinen Fehler verursacht oder einen Fehler wie "reservierter Bezeichner" oder "unerwartetes Token" hervorruft, wenn ein Ausdruck darauf folgt.

Beispiele

Ungültige Fälle

js
function *gen(a = yield 1) {}

async function f(a = await Promise.resolve(1)) {}

Gültige Fälle

Sie können die Nullish-Zuordnungsoperator verwenden, um einen Standardwert bereitzustellen. Wenn Sie null und undefined unterschiedlich behandeln möchten, müssen Sie eine Bedingung verwenden.

js
function* gen(a) {
  a ??= yield 1;
}

async function f(a) {
  a ??= await Promise.resolve(1);
}

Sie dürfen auch await oder yield verwenden, wenn sich der Ausdruck in einem Funktionsausdruck der Initialisierung befindet und die Auswertung des Standardausdrucks nicht pausiert.

js
async function f(a = (async () => await Promise.resolve(1))()) {}

Siehe auch